home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / interp / perl-5.003.tar.gz / perl-5.003.tar / perl-5.003 / Configure < prev    next >
Text File  |  1996-03-25  |  206KB  |  9,494 lines

  1. #! /bin/sh
  2. #
  3. # If these # comments don't work, trim them. Don't worry about any other
  4. # shell scripts, Configure will trim # comments from them for you.
  5. #
  6. # (If you are trying to port this package to a machine without sh,
  7. # I would suggest you have a look at the prototypical config_h.SH file
  8. # and edit it to reflect your system. Some packages may include samples
  9. # of config.h for certain machines, so you might look for one of those.)
  10. #
  11. # Yes, you may rip this off to use in other distribution packages. This
  12. # script belongs to the public domain and cannot be copyrighted.
  13. #
  14. # (Note: this Configure script was generated automatically. Rather than
  15. # working with this copy of Configure, you may wish to get metaconfig.
  16. # The dist-3.0 package (which contains metaconfig) was posted in
  17. # comp.sources.misc so you may fetch it yourself from your nearest
  18. # archive site. Check with Archie if you don't know where that can be.)
  19. #
  20.  
  21. # $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
  22. #
  23. # Generated on Wed Feb 21 14:26:18 EST 1996 [metaconfig 3.0 PL60]
  24.  
  25. cat >/tmp/c1$$ <<EOF
  26. ARGGGHHHH!!!!!
  27.  
  28. SCO csh still thinks true is false.  Write to SCO today and tell them that next
  29. year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
  30.  
  31. (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
  32. we'd have to do is go in and swap the && and || tokens, wherever they are.)
  33.  
  34. [End of diatribe. We now return you to your regularly scheduled programming...]
  35. EOF
  36. cat >/tmp/c2$$ <<EOF
  37.  
  38. OOPS!  You naughty creature!  You didn't run Configure with sh!
  39. I will attempt to remedy the situation by running sh for you...
  40. EOF
  41.  
  42. true || cat /tmp/c1$$ /tmp/c2$$
  43. true || exec sh $0 $argv:q
  44.  
  45. (exit $?0) || cat /tmp/c2$$
  46. (exit $?0) || exec sh $0 $argv:q
  47. rm -f /tmp/c1$$ /tmp/c2$$
  48.  
  49. : compute my invocation name
  50. me=$0
  51. case "$0" in
  52. */*)
  53.     me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
  54.     test "$me" || me=$0
  55.     ;;
  56. esac
  57.  
  58. : Proper PATH separator
  59. p_=:
  60. : On OS/2 this directory should exist if this is not floppy only system :-]
  61. if test -d c:/.; then
  62.     p_=\;
  63.     PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
  64.     OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
  65. fi
  66.  
  67. : Proper PATH setting
  68. paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
  69. paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
  70. paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
  71. paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
  72. paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
  73. paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
  74. paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
  75. paths="$paths /sbin /usr/sbin /usr/libexec"
  76.  
  77. for p in $paths
  78. do
  79.     case "$p_$PATH$p_" in
  80.     *$p_$p$p_*) ;;
  81.     *) test -d $p && PATH=$PATH$p_$p ;;
  82.     esac
  83. done
  84.  
  85. PATH=.$p_$PATH
  86. export PATH
  87.  
  88. : Sanity checks
  89. if test ! -t 0; then
  90.     echo "Say 'sh $me', not 'sh <$me'"
  91.     exit 1
  92. fi
  93.  
  94. : On HP-UX, large Configure scripts may exercise a bug in /bin/sh
  95. if test -f /hp-ux -a -f /bin/ksh; then
  96.     if (PATH=.; alias -x) >/dev/null 2>&1; then
  97.         : already under /bin/ksh
  98.     else
  99.         cat <<'EOM'
  100. (Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.)
  101. EOM
  102.         unset ENV
  103.         exec /bin/ksh $0 "$@"
  104.     fi
  105. else
  106.     : Warn them if they use ksh on other systems
  107.     (PATH=.; alias -x) >/dev/null 2>&1 && \
  108.         cat <<EOM
  109. (I see you are using the Korn shell.  Some ksh's blow up on $me,
  110. especially on exotic machines.  If yours does, try the Bourne shell instead.)
  111. EOM
  112. fi
  113.  
  114. : Configure runs within the UU subdirectory
  115. test -d UU || mkdir UU
  116. cd UU && rm -f ./*
  117.  
  118. dynamic_ext=''
  119. extensions=''
  120. known_extensions=''
  121. static_ext=''
  122. useposix=''
  123. usesafe=''
  124. d_bsd=''
  125. d_eunice=''
  126. d_xenix=''
  127. eunicefix=''
  128. Mcc=''
  129. awk=''
  130. bash=''
  131. bison=''
  132. byacc=''
  133. cat=''
  134. chgrp=''
  135. chmod=''
  136. chown=''
  137. comm=''
  138. compress=''
  139. cp=''
  140. cpio=''
  141. cpp=''
  142. csh=''
  143. date=''
  144. echo=''
  145. egrep=''
  146. emacs=''
  147. expr=''
  148. find=''
  149. flex=''
  150. gcc=''
  151. grep=''
  152. inews=''
  153. ksh=''
  154. less=''
  155. line=''
  156. lint=''
  157. ln=''
  158. lp=''
  159. lpr=''
  160. ls=''
  161. mail=''
  162. mailx=''
  163. make=''
  164. mkdir=''
  165. more=''
  166. mv=''
  167. nroff=''
  168. perl=''
  169. pg=''
  170. pmake=''
  171. pr=''
  172. rm=''
  173. rmail=''
  174. sed=''
  175. sendmail=''
  176. sh=''
  177. shar=''
  178. sleep=''
  179. smail=''
  180. sort=''
  181. submit=''
  182. tail=''
  183. tar=''
  184. tbl=''
  185. test=''
  186. touch=''
  187. tr=''
  188. troff=''
  189. uname=''
  190. uniq=''
  191. uuname=''
  192. vi=''
  193. zcat=''
  194. full_sed=''
  195. libswanted=''
  196. hint=''
  197. myuname=''
  198. osname=''
  199. osvers=''
  200. Author=''
  201. Date=''
  202. Header=''
  203. Id=''
  204. Locker=''
  205. Log=''
  206. RCSfile=''
  207. Revision=''
  208. Source=''
  209. State=''
  210. ar=''
  211. archobjs=''
  212. exe_ext=''
  213. firstmakefile=''
  214. lib_ext=''
  215. obj_ext=''
  216. path_sep=''
  217. afs=''
  218. alignbytes=''
  219. archlib=''
  220. archlibexp=''
  221. d_archlib=''
  222. installarchlib=''
  223. archname=''
  224. myarchname=''
  225. baserev=''
  226. bin=''
  227. binexp=''
  228. installbin=''
  229. byteorder=''
  230. cc=''
  231. gccversion=''
  232. ccflags=''
  233. cppflags=''
  234. ldflags=''
  235. lkflags=''
  236. locincpth=''
  237. optimize=''
  238. cf_email=''
  239. cf_by=''
  240. cf_time=''
  241. contains=''
  242. cpp_stuff=''
  243. cpplast=''
  244. cppminus=''
  245. cpprun=''
  246. cppstdin=''
  247. d_access=''
  248. d_alarm=''
  249. d_attribut=''
  250. d_bcmp=''
  251. d_bcopy=''
  252. d_bzero=''
  253. d_casti32=''
  254. castflags=''
  255. d_castneg=''
  256. d_chown=''
  257. d_chroot=''
  258. d_chsize=''
  259. d_closedir=''
  260. d_void_closedir=''
  261. d_const=''
  262. cryptlib=''
  263. d_crypt=''
  264. d_csh=''
  265. full_csh=''
  266. d_cuserid=''
  267. d_dbl_dig=''
  268. d_difftime=''
  269. d_dlerror=''
  270. d_dlopen=''
  271. d_dlsymun=''
  272. d_dosuid=''
  273. d_suidsafe=''
  274. d_dup2=''
  275. d_fchmod=''
  276. d_fchown=''
  277. d_fcntl=''
  278. d_fd_macros=''
  279. d_fd_set=''
  280. d_fds_bits=''
  281. d_fgetpos=''
  282. d_flexfnam=''
  283. d_flock=''
  284. d_fork=''
  285. d_fsetpos=''
  286. d_Gconvert=''
  287. d_getgrps=''
  288. d_gethent=''
  289. aphostname=''
  290. d_gethname=''
  291. d_phostname=''
  292. d_uname=''
  293. d_getlogin=''
  294. d_getpgrp2=''
  295. d_getpgrp=''
  296. d_getppid=''
  297. d_getprior=''
  298. d_htonl=''
  299. d_isascii=''
  300. d_killpg=''
  301. d_link=''
  302. d_locconv=''
  303. d_lockf=''
  304. d_lstat=''
  305. d_mblen=''
  306. d_mbstowcs=''
  307. d_mbtowc=''
  308. d_memcmp=''
  309. d_memcpy=''
  310. d_memmove=''
  311. d_memset=''
  312. d_mkdir=''
  313. d_mkfifo=''
  314. d_mktime=''
  315. d_msg=''
  316. d_msgctl=''
  317. d_msgget=''
  318. d_msgrcv=''
  319. d_msgsnd=''
  320. d_nice=''
  321. d_open3=''
  322. d_fpathconf=''
  323. d_pathconf=''
  324. d_pause=''
  325. d_pipe=''
  326. d_poll=''
  327. d_portable=''
  328. d_readdir=''
  329. d_rewinddir=''
  330. d_seekdir=''
  331. d_telldir=''
  332. d_readlink=''
  333. d_rename=''
  334. d_rmdir=''
  335. d_safebcpy=''
  336. d_safemcpy=''
  337. d_select=''
  338. d_sem=''
  339. d_semctl=''
  340. d_semget=''
  341. d_semop=''
  342. d_setegid=''
  343. d_seteuid=''
  344. d_setlinebuf=''
  345. d_setlocale=''
  346. d_setpgid=''
  347. d_setpgrp2=''
  348. d_bsdpgrp=''
  349. d_setpgrp=''
  350. d_setprior=''
  351. d_setregid=''
  352. d_setresgid=''
  353. d_setresuid=''
  354. d_setreuid=''
  355. d_setrgid=''
  356. d_setruid=''
  357. d_setsid=''
  358. d_shm=''
  359. d_shmat=''
  360. d_shmatprototype=''
  361. shmattype=''
  362. d_shmctl=''
  363. d_shmdt=''
  364. d_shmget=''
  365. d_sigsetjmp=''
  366. d_sigaction=''
  367. d_sigintrp=''
  368. d_sigvec=''
  369. d_sigvectr=''
  370. d_oldsock=''
  371. d_socket=''
  372. d_sockpair=''
  373. sockethdr=''
  374. socketlib=''
  375. d_statblks=''
  376. d_stdio_cnt_lval=''
  377. d_stdio_ptr_lval=''
  378. d_stdiobase=''
  379. d_stdstdio=''
  380. stdio_base=''
  381. stdio_bufsiz=''
  382. stdio_cnt=''
  383. stdio_ptr=''
  384. d_index=''
  385. d_strchr=''
  386. d_strcoll=''
  387. d_strctcpy=''
  388. d_strerrm=''
  389. d_strerror=''
  390. d_sysernlst=''
  391. d_syserrlst=''
  392. d_strxfrm=''
  393. d_symlink=''
  394. d_syscall=''
  395. d_sysconf=''
  396. d_system=''
  397. d_tcgetpgrp=''
  398. d_tcsetpgrp=''
  399. d_time=''
  400. timetype=''
  401. clocktype=''
  402. d_times=''
  403. d_truncate=''
  404. d_tzname=''
  405. d_umask=''
  406. d_vfork=''
  407. usevfork=''
  408. d_voidsig=''
  409. signal_t=''
  410. d_volatile=''
  411. d_charvspr=''
  412. d_vprintf=''
  413. d_wait4=''
  414. d_waitpid=''
  415. d_wcstombs=''
  416. d_wctomb=''
  417. dlext=''
  418. cccdlflags=''
  419. ccdlflags=''
  420. d_shrplib=''
  421. dlsrc=''
  422. ld=''
  423. lddlflags=''
  424. shrpdir=''
  425. usedl=''
  426. fpostype=''
  427. gidtype=''
  428. groupstype=''
  429. h_fcntl=''
  430. h_sysfile=''
  431. db_hashtype=''
  432. db_prefixtype=''
  433. i_db=''
  434. i_dbm=''
  435. i_rpcsvcdbm=''
  436. d_dirnamlen=''
  437. direntrytype=''
  438. i_dirent=''
  439. i_dld=''
  440. i_dlfcn=''
  441. i_fcntl=''
  442. i_float=''
  443. i_gdbm=''
  444. i_grp=''
  445. i_limits=''
  446. i_locale=''
  447. i_malloc=''
  448. i_math=''
  449. i_memory=''
  450. i_ndbm=''
  451. i_neterrno=''
  452. i_niin=''
  453. i_sysin=''
  454. d_pwage=''
  455. d_pwchange=''
  456. d_pwclass=''
  457. d_pwcomment=''
  458. d_pwexpire=''
  459. d_pwquota=''
  460. i_pwd=''
  461. i_stddef=''
  462. i_stdlib=''
  463. i_string=''
  464. strings=''
  465. i_sysdir=''
  466. i_sysfile=''
  467. d_voidtty=''
  468. i_bsdioctl=''
  469. i_sysfilio=''
  470. i_sysioctl=''
  471. i_syssockio=''
  472. i_sysndir=''
  473. i_sysparam=''
  474. i_sysselct=''
  475. i_sysstat=''
  476. i_systimes=''
  477. i_systypes=''
  478. i_sysun=''
  479. i_sgtty=''
  480. i_termio=''
  481. i_termios=''
  482. i_systime=''
  483. i_systimek=''
  484. i_time=''
  485. timeincl=''
  486. i_unistd=''
  487. i_utime=''
  488. i_stdarg=''
  489. i_varargs=''
  490. i_varhdr=''
  491. i_vfork=''
  492. intsize=''
  493. libc=''
  494. glibpth=''
  495. libpth=''
  496. loclibpth=''
  497. plibpth=''
  498. xlibpth=''
  499. libs=''
  500. lns=''
  501. lseektype=''
  502. d_mymalloc=''
  503. freetype=''
  504. mallocobj=''
  505. mallocsrc=''
  506. malloctype=''
  507. usemymalloc=''
  508. installman1dir=''
  509. man1dir=''
  510. man1direxp=''
  511. man1ext=''
  512. installman3dir=''
  513. man3dir=''
  514. man3direxp=''
  515. man3ext=''
  516. huge=''
  517. large=''
  518. medium=''
  519. models=''
  520. small=''
  521. split=''
  522. modetype=''
  523. mydomain=''
  524. myhostname=''
  525. phostname=''
  526. c=''
  527. n=''
  528. d_eofnblk=''
  529. eagain=''
  530. o_nonblock=''
  531. rd_nodata=''
  532. groupcat=''
  533. hostcat=''
  534. passcat=''
  535. d_oldarchlib=''
  536. oldarchlib=''
  537. oldarchlibexp=''
  538. orderlib=''
  539. ranlib=''
  540. package=''
  541. spackage=''
  542. pager=''
  543. patchlevel=''
  544. perladmin=''
  545. perlpath=''
  546. prefix=''
  547. prefixexp=''
  548. installprivlib=''
  549. privlib=''
  550. privlibexp=''
  551. prototype=''
  552. randbits=''
  553. installscript=''
  554. scriptdir=''
  555. scriptdirexp=''
  556. selecttype=''
  557. sig_name=''
  558. sig_num=''
  559. installsitearch=''
  560. sitearch=''
  561. sitearchexp=''
  562. installsitelib=''
  563. sitelib=''
  564. sitelibexp=''
  565. sizetype=''
  566. so=''
  567. sharpbang=''
  568. shsharp=''
  569. spitshell=''
  570. ssizetype=''
  571. startperl=''
  572. startsh=''
  573. stdchar=''
  574. subversion=''
  575. sysman=''
  576. uidtype=''
  577. nm_opt=''
  578. nm_so_opt=''
  579. runnm=''
  580. usenm=''
  581. incpath=''
  582. mips=''
  583. mips_type=''
  584. usrinc=''
  585. defvoidused=''
  586. voidflags=''
  587. CONFIG=''
  588.  
  589. define='define'
  590. undef='undef'
  591. smallmach='pdp11 i8086 z8000 i80286 iAPX286'
  592. rmlist=''
  593.  
  594. : We must find out about Eunice early
  595. eunicefix=':'
  596. if test -f /etc/unixtovms; then
  597.     eunicefix=/etc/unixtovms
  598. fi
  599. if test -f /etc/unixtovms.exe; then
  600.     eunicefix=/etc/unixtovms.exe
  601. fi
  602.  
  603. : list of known cpp symbols, sorted alphabetically
  604. al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
  605. al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
  606. al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
  607. al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
  608. al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
  609. al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
  610. al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
  611. al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
  612. al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
  613. al="$al VMS Xenix286"
  614. al="$al _AIX _AIX32 _AIX370 _AM29000 _COFF _CRAY _CX_UX _EPI"
  615. al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET"
  616. al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
  617. al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
  618. al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
  619. al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
  620. al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
  621. al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
  622. al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
  623. al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
  624. al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
  625. al="$al __SVR4_2__ __UMAXV__"
  626. al="$al ____386BSD____ __alpha __alpha__ __amiga"
  627. al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
  628. al="$al __host_mips__"
  629. al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
  630. al="$al __hp9000s500 __hp9000s700 __hp9000s800"
  631. al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
  632. al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
  633. al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
  634. al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
  635. al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
  636. al="$al __mc88100 __mc88100__ __mips __mips__"
  637. al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
  638. al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
  639. al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
  640. al="$al _host_mips _mips _unix"
  641. al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
  642. al="$al apollo ardent att386 att3b"
  643. al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
  644. al="$al cadmus clipper concurrent convex cray ctix"
  645. al="$al dmert encore gcos gcx gimpel gould"
  646. al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
  647. al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
  648. al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
  649. al="$al i186 i286 i386 i486 i8086"
  650. al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
  651. al="$al ksr1 linux luna luna88k m68k m88100 m88k"
  652. al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
  653. al="$al mc68040 mc68060 mc68k mc68k32 mc700"
  654. al="$al mc88000 mc88100 merlin mert mips mvs n16"
  655. al="$al ncl_el ncl_mr"
  656. al="$al news1500 news1700 news1800 news1900 news3700"
  657. al="$al news700 news800 news900 ns16000 ns32000"
  658. al="$al ns32016 ns32332 ns32k nsc32000 os osf"
  659. al="$al parisc pc532 pdp11 plexus posix pyr"
  660. al="$al riscix riscos scs sequent sgi sinix sony sony_news"
  661. al="$al sonyrisc sparc sparclite spectrum stardent stratos"
  662. al="$al sun sun3 sun386 svr4 sysV68 sysV88"
  663. al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
  664. al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
  665. al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
  666. al="$al xenix z8000"
  667.  
  668. groupstype=''
  669. i_whoami=''
  670. : default library list
  671. libswanted=''
  672. : set useposix=false in your hint file to disable the POSIX extension.
  673. useposix=true
  674. : set usesafe=false in your hint if you want to skip the Safe extension.
  675. usesafe=true
  676. : Define several unixisms.  These can be used in hint files.
  677. exe_ext='' 
  678. : Extra object files, if any, needed on this platform.
  679. archobjs=''
  680. : Possible local include directories to search.
  681. : Set locincpth to "" in a hint file to defeat local include searches.
  682. locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
  683. locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
  684. :
  685. : no include file wanted by default
  686. inclwanted=''
  687.  
  688. : change the next line if compiling for Xenix/286 on Xenix/386
  689. xlibpth='/usr/lib/386 /lib/386'
  690.  
  691. : Possible local library directories to search.
  692. loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
  693. loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
  694.  
  695. : general looking path for locating libraries
  696. glibpth="/lib/pa1.1 /usr/shlib /usr/lib/large /lib /usr/lib"
  697. glibpth="$glibpth $xlibpth /lib/large /usr/lib/small /lib/small"
  698. glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/shlib"
  699.  
  700. : Private path used by Configure to find libraries.  Its value
  701. : is prepended to libpth. This variable takes care of special
  702. : machines, like the mips.  Usually, it should be empty.
  703. plibpth=''
  704.  
  705. : full support for void wanted by default
  706. defvoidused=15
  707.  
  708. : List of libraries we want.
  709. libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl'
  710. libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
  711. libswanted="$libswanted ucb bsd BSD PW x"
  712. : We probably want to search /usr/shlib before most other libraries.
  713. : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
  714. glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
  715. glibpth="/usr/shlib $glibpth"
  716. : Do not use vfork unless overridden by a hint file.
  717. usevfork=false
  718.  
  719. : script used to extract .SH files with variable substitutions
  720. cat >extract <<'EOS'
  721. CONFIG=true
  722. echo "Doing variable substitutions on .SH files..."
  723. if test -f MANIFEST; then
  724.     shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
  725.     : Pick up possible extension manifests.
  726.     for dir in ext/* ; do
  727.         if test -f $dir/MANIFEST; then
  728.             xxx=`awk '{print $1}' < $dir/MANIFEST | 
  729.                 sed -n "/\.SH$/ s@^@$dir/@p"`
  730.             shlist="$shlist $xxx"
  731.         fi
  732.     done
  733.     set x $shlist
  734. else
  735.     echo "(Looking for .SH files under the current directory.)"
  736.     set x `find . -name "*.SH" -print`
  737. fi
  738. shift
  739. case $# in
  740. 0) set x *.SH; shift;;
  741. esac
  742. if test ! -f $1; then
  743.     shift
  744. fi
  745. for file in $*; do
  746.     case "$file" in
  747.     */*)
  748.         dir=`expr X$file : 'X\(.*\)/'`
  749.         file=`expr X$file : 'X.*/\(.*\)'`
  750.         (cd $dir && . ./$file)
  751.         ;;
  752.     *)
  753.         . ./$file
  754.         ;;
  755.     esac
  756. done
  757. if test -f config_h.SH; then
  758.     if test ! -f config.h; then
  759.     : oops, they left it out of MANIFEST, probably, so do it anyway.
  760.     . ./config_h.SH
  761.     fi
  762. fi
  763. EOS
  764.  
  765. : produce awk script to parse command line options
  766. cat >options.awk <<'EOF'
  767. BEGIN {
  768.     optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
  769.  
  770.     len = length(optstr);
  771.     for (i = 1; i <= len; i++) {
  772.         c = substr(optstr, i, 1);
  773.         if (i < len) a = substr(optstr, i + 1, 1); else a = "";
  774.         if (a == ":") {
  775.             arg[c] = 1;
  776.             i++;
  777.         }
  778.         opt[c] = 1;
  779.     }
  780. }
  781. {
  782.     expect = 0;
  783.     str = $0;
  784.     if (substr(str, 1, 1) != "-") {
  785.         printf("'%s'\n", str);
  786.         next;
  787.     }
  788.     len = length($0);
  789.     for (i = 2; i <= len; i++) {
  790.         c = substr(str, i, 1);
  791.         if (!opt[c]) {
  792.             printf("-%s\n", substr(str, i));
  793.             next;
  794.         }
  795.         printf("-%s\n", c);
  796.         if (arg[c]) {
  797.             if (i < len)
  798.                 printf("'%s'\n", substr(str, i + 1));
  799.             else
  800.                 expect = 1;
  801.             next;
  802.         }
  803.     }
  804. }
  805. END {
  806.     if (expect)
  807.         print "?";
  808. }
  809. EOF
  810.  
  811. : process the command line options
  812. set X `for arg in "$@"; do echo "X$arg"; done |
  813.     sed -e s/X// | awk -f options.awk`
  814. eval "set $*"
  815. shift
  816. rm -f options.awk
  817.  
  818. : set up default values
  819. fastread=''
  820. reuseval=false
  821. config_sh=''
  822. alldone=''
  823. error=''
  824. silent=''
  825. extractsh=''
  826. override=''
  827. knowitall=''
  828. rm -f optdef.sh
  829.  
  830. : option parsing
  831. while test $# -gt 0; do
  832.     case "$1" in
  833.     -d) shift; fastread=yes;;
  834.     -e) shift; alldone=cont;;
  835.     -f)
  836.         shift
  837.         cd ..
  838.         if test -r "$1"; then
  839.             config_sh="$1"
  840.         else
  841.             echo "$me: cannot read config file $1." >&2
  842.             error=true
  843.         fi
  844.         cd UU
  845.         shift;;
  846.     -h) shift; error=true;;
  847.     -r) shift; reuseval=true;;
  848.     -s) shift; silent=true;;
  849.     -E) shift; alldone=exit;;
  850.     -K) shift; knowitall=true;;
  851.     -O) shift; override=true;;
  852.     -S) shift; extractsh=true;;
  853.     -D)
  854.         shift
  855.         case "$1" in
  856.         *=)
  857.             echo "$me: use '-U symbol=', not '-D symbol='." >&2
  858.             echo "$me: ignoring -D $1" >&2
  859.             ;;
  860.         *=*) echo "$1" | \
  861.                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
  862.         *) echo "$1='define'" >> optdef.sh;;
  863.         esac
  864.         shift
  865.         ;;
  866.     -U)
  867.         shift
  868.         case "$1" in
  869.         *=) echo "$1" >> optdef.sh;;
  870.         *=*)
  871.             echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
  872.             echo "$me: ignoring -U $1" >&2
  873.             ;;
  874.         *) echo "$1='undef'" >> optdef.sh;;
  875.         esac
  876.         shift
  877.         ;;
  878.     -V) echo "$me generated by metaconfig 3.0 PL60." >&2
  879.         exit 0;;
  880.     --) break;;
  881.     -*) echo "$me: unknown option $1" >&2; shift; error=true;;
  882.     *) break;;
  883.     esac
  884. done
  885.  
  886. case "$error" in
  887. true)
  888.     cat >&2 <<EOM
  889. Usage: $me [-dehrEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
  890.                  [-U symbol] [-U symbol=]
  891.   -d : use defaults for all answers.
  892.   -e : go on without questioning past the production of config.sh.
  893.   -f : specify an alternate default configuration file.
  894.   -h : print this help message and exit (with an error status).
  895.   -r : reuse C symbols value if possible (skips costly nm extraction).
  896.   -s : silent mode, only echoes questions and essential information.
  897.   -D : define symbol to have some value:
  898.          -D symbol         symbol gets the value 'define'
  899.          -D symbol=value   symbol gets the value 'value'
  900.   -E : stop at the end of questions, after having produced config.sh.
  901.   -K : do not use unless you know what you are doing.
  902.   -O : let -D and -U override definitions from loaded configuration file.
  903.   -S : perform variable substitutions on all .SH files (can mix with -f)
  904.   -U : undefine symbol:
  905.          -U symbol    symbol gets the value 'undef'
  906.          -U symbol=   symbol gets completely empty
  907.   -V : print version number and exit (with a zero status).
  908. EOM
  909.     exit 1
  910.     ;;
  911. esac
  912.  
  913. exec 4>&1
  914. case "$silent" in
  915. true) exec 1>/dev/null;;
  916. esac
  917.  
  918. : run the defines and the undefines, if any, but leave the file out there...
  919. touch optdef.sh
  920. . ./optdef.sh
  921.  
  922. case "$extractsh" in
  923. true)
  924.     case "$config_sh" in
  925.     '') config_sh='config.sh'; config='./config.sh';;
  926.     /*) config="$config_sh";;
  927.     *) config="./$config_sh";;
  928.     esac
  929.     echo " "
  930.     echo "Fetching answers from $config_sh..."
  931.     cd ..
  932.     . $config
  933.     test "$override" && . ./optdef.sh
  934.     echo " "
  935.     . ./UU/extract
  936.     rm -rf UU
  937.     echo "Done."
  938.     exit 0
  939.     ;;
  940. esac
  941.  
  942. : set package name
  943. package=perl5
  944. first=`echo $package | sed -e 's/^\(.\).*/\1/'`
  945. last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
  946. case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
  947. ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
  948. *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
  949. esac
  950.  
  951. : Eunice requires " " instead of "", can you believe it
  952. echo " "
  953. : Here we go...
  954. echo "Beginning of configuration questions for $package."
  955.  
  956. trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
  957.  
  958. : Some greps do not return status, grrr.
  959. echo "grimblepritz" >grimble
  960. if grep blurfldyick grimble >/dev/null 2>&1 ; then
  961.     contains=contains
  962. elif grep grimblepritz grimble >/dev/null 2>&1 ; then
  963.     contains=grep
  964. else
  965.     contains=contains
  966. fi
  967. rm -f grimble
  968. : the following should work in any shell
  969. case "$contains" in
  970. contains*)
  971.     echo " "
  972.     echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
  973.     cat >contains <<'EOSS'
  974. grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
  975. EOSS
  976. chmod +x contains
  977. esac
  978.  
  979. : first determine how to suppress newline on echo command
  980. echo " "
  981. echo "Checking echo to see how to suppress newlines..."
  982. (echo "hi there\c" ; echo " ") >.echotmp
  983. if $contains c .echotmp >/dev/null 2>&1 ; then
  984.     echo "...using -n."
  985.     n='-n'
  986.     c=''
  987. else
  988.     cat <<'EOM'
  989. ...using \c
  990. EOM
  991.     n=''
  992.     c='\c'
  993. fi
  994. echo $n "The star should be here-->$c"
  995. echo '*'
  996. rm -f .echotmp
  997.  
  998. : Now test for existence of everything in MANIFEST
  999. echo " "
  1000. if test -f ../MANIFEST; then
  1001.     echo "First let's make sure your kit is complete.  Checking..." >&4
  1002.     awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50
  1003.     rm -f missing
  1004.     for filelist in x??; do
  1005.         (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing)
  1006.     done
  1007.     if test -s missing; then
  1008.         cat missing >&4
  1009.         cat >&4 <<'EOM'
  1010.  
  1011. THIS PACKAGE SEEMS TO BE INCOMPLETE.
  1012.  
  1013. You have the option of continuing the configuration process, despite the
  1014. distinct possibility that your kit is damaged, by typing 'y'es.  If you
  1015. do, don't blame me if something goes wrong.  I advise you to type 'n'o
  1016. and contact the author (doughera@lafcol.lafayette.edu).
  1017.  
  1018. EOM
  1019.         echo $n "Continue? [n] $c" >&4
  1020.         read ans
  1021.         case "$ans" in
  1022.         y*)
  1023.             echo "Continuing..." >&4
  1024.             rm -f missing
  1025.             ;;
  1026.         *)
  1027.             echo "ABORTING..." >&4
  1028.             kill $$
  1029.             ;;
  1030.         esac
  1031.     else
  1032.         echo "Looks good..." >&4
  1033.     fi
  1034. else
  1035.     echo "There is no MANIFEST file.  I hope your kit is complete !"
  1036. fi
  1037. rm -f missing x??
  1038.  
  1039. : compute the number of columns on the terminal for proper question formatting
  1040. case "$COLUMNS" in
  1041. '') COLUMNS='80';;
  1042. esac
  1043.  
  1044. : set up the echo used in my read
  1045. myecho="case \"\$xxxm\" in
  1046. '') echo $n \"\$rp $c\" >&4;;
  1047. *) case \"\$rp\" in
  1048.     '') echo $n \"[\$xxxm] $c\";;
  1049.     *)
  1050.         if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
  1051.             echo \"\$rp\" >&4
  1052.             echo $n \"[\$xxxm] $c\" >&4
  1053.         else
  1054.             echo $n \"\$rp [\$xxxm] $c\" >&4
  1055.         fi
  1056.         ;;
  1057.     esac;;
  1058. esac"
  1059.  
  1060. : now set up to do reads with possible shell escape and default assignment
  1061. cat <<EOSC >myread
  1062. xxxm=\$dflt
  1063. $myecho
  1064. ans='!'
  1065. case "\$fastread" in
  1066. yes) case "\$dflt" in
  1067.     '') ;;
  1068.     *) ans='';
  1069.         case "\$silent-\$rp" in
  1070.         true-) ;;
  1071.         *) echo " " >&4;;
  1072.         esac;;
  1073.     esac;;
  1074. *) case "\$silent" in
  1075.     true) case "\$rp" in
  1076.         '') ans='';;
  1077.         esac;;
  1078.     esac;;
  1079. esac
  1080. while expr "X\$ans" : "X!" >/dev/null; do
  1081.     read answ
  1082.     set x \$xxxm
  1083.     shift
  1084.     aok=''; eval "ans=\"\$answ\"" && aok=y
  1085.     case  "\$answ" in
  1086.     "\$ans")
  1087.         case "\$ans" in
  1088.         \\&*)
  1089.             set x \`expr "X\$ans" : "X&\(.*\)\$"\`
  1090.             shift
  1091.             case "\$1" in
  1092.             -d)
  1093.                 fastread=yes
  1094.                 echo "(OK, I'll run with -d after this question.)" >&4
  1095.                 ;;
  1096.             -*)
  1097.                 echo "*** Sorry, \$1 not supported yet." >&4
  1098.                 ;;
  1099.             esac
  1100.             $myecho
  1101.             ans=!
  1102.             ;;
  1103.         "!")
  1104.             sh 1>&4
  1105.             echo " "
  1106.             $myecho
  1107.             ;;
  1108.         !*)
  1109.             set x \`expr "X\$ans" : "X!\(.*\)\$"\`
  1110.             shift
  1111.             sh 1>&4 -c "\$*"
  1112.             echo " "
  1113.             $myecho
  1114.             ;;
  1115.         esac;;
  1116.     *)
  1117.         case "\$aok" in
  1118.         y)
  1119.             echo "*** Substitution done -- please confirm."
  1120.             xxxm="\$ans"
  1121.             ans=\`echo $n "\$ans$c" | tr '\012' ' '\`
  1122.             xxxm="\$ans"
  1123.             ans=!
  1124.             ;;
  1125.         *)
  1126.             echo "*** Error -- try again."
  1127.             ans=!
  1128.             ;;
  1129.         esac
  1130.         $myecho
  1131.         ;;
  1132.     esac
  1133.     case "\$ans\$xxxm\$nostick" in
  1134.     '')
  1135.         ans=!
  1136.         $myecho
  1137.         ;;
  1138.     esac
  1139. done
  1140. case "\$ans" in
  1141. '') ans="\$xxxm";;
  1142. esac
  1143. EOSC
  1144.  
  1145. : create .config dir to save info across Configure sessions
  1146. test -d ../.config || mkdir ../.config
  1147. cat >../.config/README <<EOF
  1148. This directory created by Configure to save information that should
  1149. persist across sessions.
  1150.  
  1151. You may safely delete it if you wish.
  1152. EOF
  1153.  
  1154. : general instructions
  1155. needman=true
  1156. firsttime=true
  1157. user=`( (logname) 2>/dev/null || whoami) 2>&1`
  1158. if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
  1159.     firsttime=false
  1160.     echo " "
  1161.     rp='Would you like to see the instructions?'
  1162.     dflt=n
  1163.     . ./myread
  1164.     case "$ans" in
  1165.     [yY]*) ;;
  1166.     *) needman=false;;
  1167.     esac
  1168. fi
  1169. if $needman; then
  1170.     cat <<EOH
  1171.  
  1172. This installation shell script will examine your system and ask you questions
  1173. to determine how the perl5 package should be installed. If you get
  1174. stuck on a question, you may use a ! shell escape to start a subshell or
  1175. execute a command.  Many of the questions will have default answers in square
  1176. brackets; typing carriage return will give you the default.
  1177.  
  1178. On some of the questions which ask for file or directory names you are allowed
  1179. to use the ~name construct to specify the login directory belonging to "name",
  1180. even if you don't have a shell which knows about that.  Questions where this is
  1181. allowed will be marked "(~name ok)".
  1182.  
  1183. EOH
  1184.     rp=''
  1185.     dflt='Type carriage return to continue'
  1186.     . ./myread
  1187.     cat <<'EOH'
  1188.  
  1189. The prompter used in this script allows you to use shell variables and
  1190. backticks in your answers.  You may use $1, $2, etc...  to refer to the words
  1191. in the default answer, as if the default line was a set of arguments given to a
  1192. script shell.  This means you may also use $* to repeat the whole default line,
  1193. so you do not have to re-type everything to add something to the default.
  1194.  
  1195. Everytime there is a substitution, you will have to confirm.  If there is an
  1196. error (e.g. an unmatched backtick), the default answer will remain unchanged
  1197. and you will be prompted again.
  1198.  
  1199. If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
  1200. the questions and use the computed defaults (or the previous answers if there
  1201. was already a config.sh file). Type 'Configure -h' for a list of options.
  1202. You may also start interactively and then answer '& -d' at any prompt to turn
  1203. on the non-interactive behaviour for the remaining of the execution.
  1204.  
  1205. EOH
  1206.     . ./myread
  1207.     cat <<EOH
  1208.  
  1209. Much effort has been expended to ensure that this shell script will run on any
  1210. Unix system.  If despite that it blows up on yours, your best bet is to edit
  1211. Configure and run it again.  If you can't run Configure for some reason,
  1212. you'll have to generate a config.sh file by hand.  Whatever problems you
  1213. have, let me (doughera@lafcol.lafayette.edu) know how I blew it.
  1214.  
  1215. This installation script affects things in two ways:
  1216.  
  1217. 1) it may do direct variable substitutions on some of the files included
  1218.    in this kit.
  1219. 2) it builds a config.h file for inclusion in C programs.  You may edit
  1220.    any of these files as the need arises after running this script.
  1221.  
  1222. If you make a mistake on a question, there is no easy way to back up to it
  1223. currently.  The easiest thing to do is to edit config.sh and rerun all the SH
  1224. files.  Configure will offer to let you do this before it runs the SH files.
  1225.  
  1226. EOH
  1227.     dflt='Type carriage return to continue'
  1228.     . ./myread
  1229.     case "$firsttime" in
  1230.     true) echo $user >>../.config/instruct;;
  1231.     esac
  1232. fi
  1233.  
  1234. : see if sh knows # comments
  1235. echo " "
  1236. echo "Checking your sh to see if it knows about # comments..." >&4
  1237. if `sh -c '#' >/dev/null 2>&1`; then
  1238.     echo "Your sh handles # comments correctly."
  1239.     shsharp=true
  1240.     spitshell=cat
  1241.     echo " "
  1242.     echo "Okay, let's see if #! works on this system..."
  1243.     xcat=/bin/cat
  1244.     test -f $xcat || xcat=/usr/bin/cat
  1245.     echo "#!$xcat" >try
  1246.     $eunicefix try
  1247.     chmod +x try
  1248.     ./try > today
  1249.     if test -s today; then
  1250.         echo "It does."
  1251.         sharpbang='#!'
  1252.     else
  1253.         echo "#! $xcat" > try
  1254.         $eunicefix try
  1255.         chmod +x try
  1256.         ./try > today
  1257.         if test -s today; then
  1258.             echo "It does."
  1259.             sharpbang='#! '
  1260.         else
  1261.             echo "It's just a comment."
  1262.             sharpbang=': use '
  1263.         fi
  1264.     fi
  1265. else
  1266.     echo "Your sh doesn't grok # comments--I will strip them later on."
  1267.     shsharp=false
  1268.     cd ..
  1269.     echo "exec grep -v '^[     ]*#'" >spitshell
  1270.     chmod +x spitshell
  1271.     $eunicefix spitshell
  1272.     spitshell=`pwd`/spitshell
  1273.     cd UU
  1274.     echo "I presume that if # doesn't work, #! won't work either!"
  1275.     sharpbang=': use '
  1276. fi
  1277. rm -f try today
  1278.  
  1279. : figure out how to guarantee sh startup
  1280. echo " "
  1281. echo "Checking out how to guarantee sh startup..." >&4
  1282. case "$SYSTYPE" in
  1283. *bsd*|sys5*) startsh=$sharpbang"/$SYSTYPE/bin/sh";;
  1284. *) startsh=$sharpbang'/bin/sh';;
  1285. esac
  1286. echo "Let's see if '$startsh' works..."
  1287. cat >try <<EOSS
  1288. $startsh
  1289. set abc
  1290. test "$?abc" != 1
  1291. EOSS
  1292.  
  1293. chmod +x try
  1294. $eunicefix try
  1295. if ./try; then
  1296.     echo "Yup, it does."
  1297. else
  1298. echo "Nope.  You may have to fix up the shell scripts to make sure sh runs them."
  1299. fi
  1300. rm -f try
  1301.  
  1302. : find out where common programs are
  1303. echo " "
  1304. echo "Locating common programs..." >&4
  1305. cat <<EOSC >loc
  1306. $startsh
  1307. case \$# in
  1308. 0) exit 1;;
  1309. esac
  1310. thing=\$1
  1311. shift
  1312. dflt=\$1
  1313. shift
  1314. for dir in \$*; do
  1315.     case "\$thing" in
  1316.     .)
  1317.     if test -d \$dir/\$thing; then
  1318.         echo \$dir
  1319.         exit 0
  1320.     fi
  1321.     ;;
  1322.     *)
  1323.     for thisthing in \$dir/\$thing; do
  1324.         : just loop through to pick last item
  1325.     done
  1326.     if test -f \$thisthing; then
  1327.         echo \$thisthing
  1328.         exit 0
  1329.     elif test -f \$dir/\$thing.exe; then
  1330.         : on Eunice apparently
  1331.         echo \$dir/\$thing
  1332.         exit 0
  1333.     fi
  1334.     ;;
  1335.     esac
  1336. done
  1337. echo \$dflt
  1338. exit 1
  1339. EOSC
  1340. chmod +x loc
  1341. $eunicefix loc
  1342. loclist="
  1343. awk
  1344. cat
  1345. comm
  1346. cp
  1347. echo
  1348. expr
  1349. find
  1350. grep
  1351. ln
  1352. ls
  1353. mkdir
  1354. rm
  1355. sed
  1356. sort
  1357. touch
  1358. tr
  1359. uniq
  1360. "
  1361. trylist="
  1362. Mcc
  1363. byacc
  1364. cpp
  1365. csh
  1366. date
  1367. egrep
  1368. less
  1369. line
  1370. more
  1371. nroff
  1372. perl
  1373. pg
  1374. sendmail
  1375. test
  1376. uname
  1377. "
  1378. pth=`echo $PATH | sed -e "s/$p_/ /g"`
  1379. pth="$pth /lib /usr/lib"
  1380. for file in $loclist; do
  1381.     xxx=`./loc $file $file $pth`
  1382.     eval $file=$xxx
  1383.     eval _$file=$xxx
  1384.     case "$xxx" in
  1385.     /*)
  1386.         echo $file is in $xxx.
  1387.         ;;
  1388.     ?:[\\/]*)
  1389.         echo $file is in $xxx.
  1390.         ;;
  1391.     *)
  1392.         echo "I don't know where '$file' is, and my life depends on it." >&4
  1393.         echo "Go find a public domain implementation or fix your PATH setting!" >&4
  1394.         exit 1
  1395.         ;;
  1396.     esac
  1397. done
  1398. echo " "
  1399. echo "Don't worry if any of the following aren't found..."
  1400. say=offhand
  1401. for file in $trylist; do
  1402.     xxx=`./loc $file $file $pth`
  1403.     eval $file=$xxx
  1404.     eval _$file=$xxx
  1405.     case "$xxx" in
  1406.     /*)
  1407.         echo $file is in $xxx.
  1408.         ;;
  1409.     ?:[\\/]*)
  1410.         echo $file is in $xxx.
  1411.         ;;
  1412.     *)
  1413.         echo "I don't see $file out there, $say."
  1414.         say=either
  1415.         ;;
  1416.     esac
  1417. done
  1418. case "$egrep" in
  1419. egrep)
  1420.     echo "Substituting grep for egrep."
  1421.     egrep=$grep
  1422.     ;;
  1423. esac
  1424. case "$test" in
  1425. test)
  1426.     echo "Hopefully test is built into your sh."
  1427.     ;;
  1428. *)
  1429.     if `sh -c "PATH= test true" >/dev/null 2>&1`; then
  1430.         echo "Using the test built into your sh."
  1431.         test=test
  1432.         _test=test
  1433.     fi
  1434.     ;;
  1435. esac
  1436. case "$echo" in
  1437. echo)
  1438.     echo "Hopefully echo is built into your sh."
  1439.     ;;
  1440. '') ;;
  1441. *)
  1442.     echo " "
  1443. echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
  1444.     $echo $n "hi there$c" >foo1
  1445.     echo $n "hi there$c" >foo2
  1446.     if cmp foo1 foo2 >/dev/null 2>&1; then
  1447.         echo "They are compatible.  In fact, they may be identical."
  1448.     else
  1449.         case "$n" in
  1450.         '-n') n='' c='\c';;
  1451.         *) n='-n' c='';;
  1452.         esac
  1453.         cat <<FOO
  1454. They are not compatible!  You are probably running ksh on a non-USG system.
  1455. I'll have to use $echo instead of the builtin, since Bourne shell doesn't
  1456. have echo built in and we may have to run some Bourne shell scripts.  That
  1457. means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
  1458.  
  1459. FOO
  1460.         $echo $n "The star should be here-->$c"
  1461.         $echo "*"
  1462.     fi
  1463.     $rm -f foo1 foo2
  1464.     ;;
  1465. esac
  1466.  
  1467. : determine whether symbolic links are supported
  1468. echo " "
  1469. $touch blurfl
  1470. if $ln -s blurfl sym > /dev/null 2>&1 ; then
  1471.     echo "Symbolic links are supported." >&4
  1472.     lns="$ln -s"
  1473. else
  1474.     echo "Symbolic links are NOT supported." >&4
  1475.     lns="$ln"
  1476. fi
  1477. $rm -f blurfl sym
  1478.  
  1479. : see whether [:lower:] and [:upper:] are supported character classes
  1480. echo " "
  1481. up='[A-Z]'
  1482. low='[a-z]'
  1483. case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
  1484. ABYZ)
  1485.     echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
  1486.     up='[:upper:]'
  1487.     low='[:lower:]'
  1488.     ;;
  1489. *)
  1490.     echo "Your tr only supports [a-z] and [A-Z] to convert case." >&4
  1491.     ;;
  1492. esac
  1493. : set up the translation script tr, must be called with ./tr of course
  1494. cat >tr <<EOSC
  1495. $startsh
  1496. case "\$1\$2" in
  1497. '[A-Z][a-z]') exec $tr '$up' '$low';;
  1498. '[a-z][A-Z]') exec $tr '$low' '$up';;
  1499. esac
  1500. exec $tr "\$@"
  1501. EOSC
  1502. chmod +x tr
  1503. $eunicefix tr
  1504.  
  1505. : Try to determine whether config.sh was made on this system
  1506. case "$config_sh" in
  1507. '')
  1508. myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
  1509. myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
  1510.     ./tr '[A-Z]' '[a-z]' | tr '\012' ' '`
  1511. newmyuname="$myuname"
  1512. dflt=n
  1513. case "$knowitall" in
  1514. '')
  1515.     if test -f ../config.sh; then
  1516.         if $contains myuname= ../config.sh >/dev/null 2>&1; then
  1517.             eval "`grep myuname= ../config.sh`"
  1518.         fi
  1519.         if test "X$myuname" = "X$newmyuname"; then
  1520.             dflt=y
  1521.         fi
  1522.     fi
  1523.     ;;
  1524. *) dflt=y;;
  1525. esac
  1526.  
  1527. : Get old answers from old config file if Configure was run on the
  1528. : same system, otherwise use the hints.
  1529. hint=default
  1530. cd ..
  1531. if test -f config.sh; then
  1532.     echo " "
  1533.     rp="I see a config.sh file.  Shall I use it to set the defaults?"
  1534.     . UU/myread
  1535.     case "$ans" in
  1536.     n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
  1537.     *)  echo "Fetching default answers from your old config.sh file..." >&4
  1538.         tmp_n="$n"
  1539.         tmp_c="$c"
  1540.         . ./config.sh
  1541.         cp config.sh UU
  1542.         n="$tmp_n"
  1543.         c="$tmp_c"
  1544.         hint=previous
  1545.         ;;
  1546.     esac
  1547. fi
  1548. if test ! -f config.sh; then
  1549.     $cat <<EOM
  1550.  
  1551. First time through, eh?  I have some defaults handy for the following systems:
  1552.  
  1553. EOM
  1554.     cd hints; ls -C *.sh | $sed 's/\.sh/   /g' >&4
  1555.     dflt=''
  1556.     : Half the following guesses are probably wrong... If you have better
  1557.     : tests or hints, please send them to doughera@lafcol.lafayette.edu
  1558.     : The metaconfig authors would also appreciate a copy...
  1559.     $test -f /irix && osname=irix
  1560.     $test -f /xenix && osname=sco_xenix
  1561.     $test -f /dynix && osname=dynix
  1562.     $test -f /dnix && osname=dnix
  1563.      $test -f /unicos && osname=unicos && osvers=`$uname -r`
  1564.     $test -f /bin/mips && /bin/mips && osname=mips
  1565.     $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
  1566.         $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
  1567.     $test -d /usr/apollo/bin && osname=apollo
  1568.     $test -f /etc/saf/_sactab && osname=svr4
  1569.     $test -d /usr/include/minix && osname=minix
  1570.     if $test -d /MachTen; then
  1571.         osname=machten 
  1572.         if $test -x /sbin/version; then
  1573.             osvers=`/sbin/version | $awk '{print $2}' | 
  1574.             $sed -e 's/[A-Za-z]$//'`
  1575.         elif $test -x /usr/etc/version; then
  1576.             osvers=`/usr/etc/version | $awk '{print $2}' | 
  1577.             $sed -e 's/[A-Za-z]$//'`
  1578.         else
  1579.             osvers="$2.$3"
  1580.         fi
  1581.     fi
  1582.     if $test -f $uname; then
  1583.         set X $myuname
  1584.         shift
  1585.  
  1586.         case "$5" in
  1587.         fps*) osname=fps ;;
  1588.         mips*)
  1589.             case "$4" in
  1590.             umips) osname=umips ;;
  1591.             *) osname=mips ;;
  1592.             esac;;
  1593.         [23]100) osname=mips ;;
  1594.         next*) osname=next ;;
  1595.         news*) osname=news ;;
  1596.         i386*)
  1597.             if $test -f /etc/kconfig; then
  1598.                 osname=isc
  1599.                 if test "$lns" = "ln -s"; then
  1600.                     osvers=4
  1601.                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
  1602.                     osvers=3
  1603.                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
  1604.                     osvers=2
  1605.                 fi
  1606.             fi
  1607.             ;;
  1608.         esac
  1609.  
  1610.         case "$1" in
  1611.         aix) osname=aix
  1612.             tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
  1613.             case "$tmp" in
  1614.             'not found') osvers="$4"."$3" ;;
  1615.             '<3240'|'<>3240') osvers=3.2.0 ;;
  1616.             '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
  1617.             '=3250'|'>3250') osvers=3.2.5 ;;
  1618.             *) osvers=$tmp;;
  1619.             esac
  1620.             ;;
  1621.         dnix) osname=dnix
  1622.             osvers="$3"
  1623.             ;;
  1624.         domainos) osname=apollo
  1625.             osvers="$3"
  1626.             ;;
  1627.         dgux) osname=dgux 
  1628.             osvers="$3"
  1629.             ;;
  1630.         freebsd) osname=freebsd 
  1631.             osvers="$3" ;;
  1632.         genix) osname=genix ;;
  1633.         hp*) osname=hpux 
  1634.             case "$3" in
  1635.             *.08.*) osvers=9 ;;
  1636.             *.09.*) osvers=9 ;;
  1637.             *.10.*) osvers=10 ;;
  1638.             *)    osvers="$3" ;;
  1639.             esac
  1640.             ;;
  1641.         irix) osname=irix
  1642.             case "$3" in
  1643.             4*) osvers=4 ;;
  1644.             5*) osvers=5 ;;
  1645.             *)    osvers="$3" ;;
  1646.             esac
  1647.             ;;
  1648.         linux) osname=linux
  1649.             case "$3" in
  1650.             1*) osvers=1 ;;
  1651.             *)    osvers="$3" ;;
  1652.             esac
  1653.             ;;
  1654.         netbsd*) osname=netbsd 
  1655.             osvers="$3"
  1656.             ;;
  1657.         bsd386) osname=bsd386
  1658.             osvers=`$uname -r`
  1659.             ;;
  1660.         next*) osname=next ;;
  1661.         solaris) osname=solaris
  1662.             case "$3" in
  1663.             5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
  1664.             *)    osvers="$3" ;;
  1665.             esac
  1666.             ;;
  1667.         sunos) osname=sunos
  1668.             case "$3" in
  1669.             5*) osname=solaris
  1670.                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
  1671.             *)    osvers="$3" ;;
  1672.             esac
  1673.             ;;
  1674.         titanos) osname=titanos
  1675.             case "$3" in
  1676.             1*) osvers=1 ;;
  1677.             2*) osvers=2 ;;
  1678.             3*) osvers=3 ;;
  1679.             4*) osvers=4 ;;
  1680.             *)    osvers="$3" ;;
  1681.             esac
  1682.             ;;
  1683.         ultrix) osname=ultrix
  1684.             osvers="$3"
  1685.             ;;
  1686.         osf1)    case "$5" in
  1687.                 alpha)
  1688.                     osname=dec_osf
  1689.                     osvers=`echo "$3" | sed 's/^[vt]//'`
  1690.                     ;;
  1691.             hp*)    osname=hp_osf1    ;;
  1692.             mips)    osname=mips_osf1 ;;
  1693.             esac
  1694.             ;;
  1695.         uts) osname=uts 
  1696.             osvers="$3"
  1697.             ;;
  1698.         $2) case "$osname" in
  1699.             *isc*) ;;
  1700.             *freebsd*) ;;
  1701.              svr*)
  1702.                 : svr4.x or possibly later
  1703.                 case "svr$3" in    
  1704.                 ${osname}*)
  1705.                     osname=svr$3
  1706.                     osvers=$4
  1707.                     ;;
  1708.                 esac
  1709.                 case "$osname" in
  1710.                 svr4.0)
  1711.                     : Check for ESIX
  1712.                     if test -f /stand/boot ; then
  1713.                         eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
  1714.                         if test -n "$INITPROG" -a -f "$INITPROG"; then
  1715.             isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
  1716.                             if test -n "$isesix"; then
  1717.                                 osname=esix4
  1718.                             fi
  1719.                         fi
  1720.                     fi
  1721.                     ;;
  1722.                 esac
  1723.                 ;;
  1724.             *)    if test -f /etc/systemid; then
  1725.                     osname=sco
  1726.                     set `echo $3 | $sed 's/\./ /g'` $4
  1727.                     if $test -f sco_$1_$2_$3.sh; then
  1728.                         osvers=$1.$2.$3
  1729.                     elif $test -f sco_$1_$2.sh; then
  1730.                         osvers=$1.$2
  1731.                     elif $test -f sco_$1.sh; then
  1732.                         osvers=$1
  1733.                     fi
  1734.                 else
  1735.                     case "$osname" in
  1736.                     '') : Still unknown.  Probably a generic Sys V.
  1737.                         osname="sysv"
  1738.                         osvers="$3"
  1739.                         ;;
  1740.                     esac
  1741.                 fi
  1742.                 ;;
  1743.             esac
  1744.             ;;
  1745.         *)    case "$osname" in
  1746.             '') : Still unknown.  Probably a generic BSD.
  1747.                 osname="$1"
  1748.                 osvers="$3"
  1749.                 ;;
  1750.             esac
  1751.             ;;
  1752.         esac
  1753.     else
  1754.         if test -f /vmunix -a -f news_os.sh; then
  1755.             (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1
  1756.             if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then
  1757.                 osname=news_os
  1758.             fi
  1759.             $rm -f ../UU/kernel.what
  1760.         elif test -d c:/.; then
  1761.             set X $myuname
  1762.             osname=os2
  1763.             osvers="$5"
  1764.         fi
  1765.     fi
  1766.     
  1767.     : Now look for a hint file osname_osvers, unless one has been
  1768.     : specified already.
  1769.     case "$hintfile" in
  1770.     ''|' ')
  1771.         file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
  1772.         : Also try without trailing minor version numbers.
  1773.         xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
  1774.         xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
  1775.         xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
  1776.         xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
  1777.         case "$file" in
  1778.         '') dflt=none ;;
  1779.         *)  case "$osvers" in
  1780.             '') dflt=$file
  1781.                 ;;
  1782.             *)  if $test -f $file.sh ; then
  1783.                     dflt=$file
  1784.                 elif $test -f $xfile.sh ; then
  1785.                     dflt=$xfile
  1786.                 elif $test -f $xxfile.sh ; then
  1787.                     dflt=$xxfile
  1788.                 elif $test -f $xxxfile.sh ; then
  1789.                     dflt=$xxxfile
  1790.                 elif $test -f $xxxxfile.sh ; then
  1791.                     dflt=$xxxxfile
  1792.                 elif $test -f "${osname}.sh" ; then
  1793.                     dflt="${osname}"
  1794.                 else
  1795.                     dflt=none
  1796.                 fi
  1797.                 ;;
  1798.             esac
  1799.             ;;
  1800.         esac
  1801.         ;;
  1802.     *)
  1803.         dflt=`echo $hintfile | $sed 's/\.sh$//'`
  1804.         ;;
  1805.     esac
  1806.  
  1807.     $cat <<EOM
  1808.  
  1809. You may give one or more space-separated answers, or "none" if appropriate.
  1810. If your OS version has no hints, DO NOT give a wrong version -- say "none".
  1811.  
  1812. EOM
  1813.     rp="Which of these apply, if any?"
  1814.     . ../UU/myread
  1815.     tans=$ans
  1816.     for file in $tans; do
  1817.         if $test -f $file.sh; then
  1818.             . ./$file.sh
  1819.             $cat $file.sh >> ../UU/config.sh
  1820.         elif $test X$tans = X -o X$tans = Xnone ; then
  1821.             : nothing
  1822.         else
  1823.             : Give one chance to correct a possible typo.
  1824.             echo "$file.sh does not exist"
  1825.             dflt=$file
  1826.             rp="hint to use instead?"
  1827.             . ../UU/myread
  1828.             for file in $ans; do
  1829.                 if $test -f "$file.sh"; then
  1830.                     . ./$file.sh
  1831.                     $cat $file.sh >> ../UU/config.sh
  1832.                 elif $test X$ans = X -o X$ans = Xnone ; then
  1833.                     : nothing
  1834.                 else
  1835.                     echo "$file.sh does not exist -- ignored."
  1836.                 fi
  1837.             done
  1838.         fi
  1839.     done
  1840.  
  1841.     hint=recommended
  1842.     : Remember our hint file for later.
  1843.     if $test -f "$file.sh" ; then
  1844.         hintfile="$file"
  1845.     else
  1846.         hintfile=''
  1847.     fi
  1848.  
  1849.     cd ..
  1850. fi
  1851. cd UU
  1852. ;;
  1853. *)
  1854.     echo " "
  1855.     echo "Fetching default answers from $config_sh..." >&4
  1856.     tmp_n="$n"
  1857.     tmp_c="$c"
  1858.     cd ..
  1859.     cp $config_sh config.sh 2>/dev/null
  1860.     . ./config.sh
  1861.     cd UU
  1862.     cp ../config.sh .
  1863.     n="$tmp_n"
  1864.     c="$tmp_c"
  1865.     hint=previous
  1866.     ;;
  1867. esac
  1868. test "$override" && . ./optdef.sh
  1869. myuname="$newmyuname"
  1870.  
  1871. : Restore computed paths
  1872. for file in $loclist $trylist; do
  1873.     eval $file="\$_$file"
  1874. done
  1875.  
  1876. cat << EOM
  1877.  
  1878. Configure uses the operating system name and version to set some defaults.
  1879. The default value is probably right if the name rings a bell. Otherwise,
  1880. since spelling matters for me, either accept the default or answer "none"
  1881. to leave it blank.
  1882.  
  1883. EOM
  1884. case "$osname" in
  1885.     ''|' ')
  1886.         case "$hintfile" in
  1887.         ''|' '|none) dflt=none ;;
  1888.         *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
  1889.         esac
  1890.         ;;
  1891.     *) dflt="$osname" ;;
  1892. esac
  1893. rp="Operating system name?"
  1894. . ./myread
  1895. case "$ans" in
  1896. none)  osname='' ;;
  1897. *) osname=`echo "$ans" | $sed -e 's/[     ][    ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
  1898. esac
  1899. : who configured the system
  1900. cf_time=`$date 2>&1`
  1901. (logname > .temp) >/dev/null 2>&1
  1902. $test -s .temp || (whoami > .temp) >/dev/null 2>&1
  1903. $test -s .temp || echo unknown > .temp
  1904. cf_by=`$cat .temp`
  1905. $rm -f .temp
  1906.  
  1907. : determine the architecture name
  1908. echo " "
  1909. if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
  1910.     tarch=`arch`"-$osname"
  1911. elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
  1912.     if uname -m > tmparch 2>&1 ; then
  1913.         tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch`
  1914.     else
  1915.         tarch="$osname"
  1916.     fi
  1917.     $rm -f tmparch
  1918. else
  1919.     tarch="$osname"
  1920. fi
  1921. case "$myarchname" in
  1922. ''|"$tarch") ;;
  1923. *)
  1924.     echo "(Your architecture name used to be $myarchname.)"
  1925.     archname=''
  1926.     ;;
  1927. esac
  1928. case "$archname" in
  1929. '') dflt="$tarch";;
  1930. *) dflt="$archname";;
  1931. esac
  1932. rp='What is your architecture name'
  1933. . ./myread
  1934. archname="$ans"
  1935. myarchname="$tarch"
  1936.  
  1937. : is AFS running?
  1938. echo " "
  1939. if test -d /afs; then
  1940.     echo "AFS may be running... I'll be extra cautious then..." >&4
  1941.     afs=true
  1942. else
  1943.     echo "AFS does not seem to be running..." >&4
  1944.     afs=false
  1945. fi
  1946.  
  1947. : decide how portable to be.  Allow command line overrides.
  1948. case "$d_portable" in
  1949. "$undef") ;;
  1950. *)    d_portable="$define" ;;
  1951. esac
  1952.  
  1953. : set up shell script to do ~ expansion
  1954. cat >filexp <<EOSS
  1955. $startsh
  1956. : expand filename
  1957. case "\$1" in
  1958.  ~/*|~)
  1959.     echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
  1960.     ;;
  1961.  ~*)
  1962.     if $test -f /bin/csh; then
  1963.         /bin/csh -f -c "glob \$1"
  1964.         failed=\$?
  1965.         echo ""
  1966.         exit \$failed
  1967.     else
  1968.         name=\`$expr x\$1 : '..\([^/]*\)'\`
  1969.         dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
  1970.         if $test ! -d "\$dir"; then
  1971.             me=\`basename \$0\`
  1972.             echo "\$me: can't locate home directory for: \$name" >&2
  1973.             exit 1
  1974.         fi
  1975.         case "\$1" in
  1976.         */*)
  1977.             echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
  1978.             ;;
  1979.         *)
  1980.             echo \$dir
  1981.             ;;
  1982.         esac
  1983.     fi
  1984.     ;;
  1985. *)
  1986.     echo \$1
  1987.     ;;
  1988. esac
  1989. EOSS
  1990. chmod +x filexp
  1991. $eunicefix filexp
  1992.  
  1993. : now set up to get a file name
  1994. cat <<'EOSC' >getfile
  1995. tilde=''
  1996. fullpath=''
  1997. already=''
  1998. skip=''
  1999. none_ok=''
  2000. exp_file=''
  2001. nopath_ok=''
  2002. orig_rp="$rp"
  2003. orig_dflt="$dflt"
  2004.  
  2005. case "$fn" in
  2006. *\(*)
  2007.     expr $fn : '.*(\(.*\)).*' | tr ',' '\012' >getfile.ok
  2008.     fn=`echo $fn | sed 's/(.*)//'`
  2009.     ;;
  2010. esac
  2011.  
  2012. case "$fn" in
  2013. *:*)
  2014.     loc_file=`expr $fn : '.*:\(.*\)'`
  2015.     fn=`expr $fn : '\(.*\):.*'`
  2016.     ;;
  2017. esac
  2018.  
  2019. case "$fn" in
  2020. *~*) tilde=true;;
  2021. esac
  2022. case "$fn" in
  2023. */*) fullpath=true;;
  2024. esac
  2025. case "$fn" in
  2026. *+*) skip=true;;
  2027. esac
  2028. case "$fn" in
  2029. *n*) none_ok=true;;
  2030. esac
  2031. case "$fn" in
  2032. *e*) exp_file=true;;
  2033. esac
  2034. case "$fn" in
  2035. *p*) nopath_ok=true;;
  2036. esac
  2037.  
  2038. case "$fn" in
  2039. *f*) type='File';;
  2040. *d*) type='Directory';;
  2041. *l*) type='Locate';;
  2042. esac
  2043.  
  2044. what="$type"
  2045. case "$what" in
  2046. Locate) what='File';;
  2047. esac
  2048.  
  2049. case "$exp_file" in
  2050. '')
  2051.     case "$d_portable" in
  2052.     "$define") ;;
  2053.     *) exp_file=true;;
  2054.     esac
  2055.     ;;
  2056. esac
  2057.  
  2058. cd ..
  2059. while test "$type"; do
  2060.     redo=''
  2061.     rp="$orig_rp"
  2062.     dflt="$orig_dflt"
  2063.     case "$tilde" in
  2064.     true) rp="$rp (~name ok)";;
  2065.     esac
  2066.     . UU/myread
  2067.     if test -f UU/getfile.ok && \
  2068.         $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
  2069.     then
  2070.         value="$ans"
  2071.         ansexp="$ans"
  2072.         break
  2073.     fi
  2074.     case "$ans" in
  2075.     none)
  2076.         value=''
  2077.         ansexp=''
  2078.         case "$none_ok" in
  2079.         true) type='';;
  2080.         esac
  2081.         ;;
  2082.     *)
  2083.         case "$tilde" in
  2084.         '') value="$ans"
  2085.             ansexp="$ans";;
  2086.         *)
  2087.             value=`UU/filexp $ans`
  2088.             case $? in
  2089.             0)
  2090.                 if test "$ans" != "$value"; then
  2091.                     echo "(That expands to $value on this system.)"
  2092.                 fi
  2093.                 ;;
  2094.             *) value="$ans";;
  2095.             esac
  2096.             ansexp="$value"
  2097.             case "$exp_file" in
  2098.             '') value="$ans";;
  2099.             esac
  2100.             ;;
  2101.         esac
  2102.         case "$fullpath" in
  2103.         true)
  2104.             case "$ansexp" in
  2105.             /*) value="$ansexp" ;;
  2106.             *)
  2107.                 redo=true
  2108.                 case "$already" in
  2109.                 true)
  2110.                 echo "I shall only accept a full path name, as in /bin/ls." >&4
  2111.                 echo "Use a ! shell escape if you wish to check pathnames." >&4
  2112.                     ;;
  2113.                 *)
  2114.                 echo "Please give a full path name, starting with slash." >&4
  2115.                     case "$tilde" in
  2116.                     true)
  2117.                 echo "Note that using ~name is ok provided it expands well." >&4
  2118.                         already=true
  2119.                         ;;
  2120.                     esac
  2121.                 esac
  2122.                 ;;
  2123.             esac
  2124.             ;;
  2125.         esac
  2126.         case "$redo" in
  2127.         '')
  2128.             case "$type" in
  2129.             File)
  2130.                 if test -f "$ansexp"; then
  2131.                     type=''
  2132.                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
  2133.                 then
  2134.                     echo "($value is not a plain file, but that's ok.)"
  2135.                     type=''
  2136.                 fi
  2137.                 ;;
  2138.             Directory)
  2139.                 if test -d "$ansexp"; then
  2140.                     type=''
  2141.                 fi
  2142.                 ;;
  2143.             Locate)
  2144.                 if test -d "$ansexp"; then
  2145.                     echo "(Looking for $loc_file in directory $value.)"
  2146.                     value="$value/$loc_file"
  2147.                     ansexp="$ansexp/$loc_file"
  2148.                 fi
  2149.                 if test -f "$ansexp"; then
  2150.                     type=''
  2151.                 fi
  2152.                 case "$nopath_ok" in
  2153.                 true)    case "$value" in
  2154.                     */*) ;;
  2155.                     *)    echo "Assuming $value will be in people's path."
  2156.                         type=''
  2157.                         ;;
  2158.                     esac
  2159.                     ;;
  2160.                 esac
  2161.                 ;;
  2162.             esac
  2163.  
  2164.             case "$skip" in
  2165.             true) type='';
  2166.             esac
  2167.  
  2168.             case "$type" in
  2169.             '') ;;
  2170.             *)
  2171.                 if test "$fastread" = yes; then
  2172.                     dflt=y
  2173.                 else
  2174.                     dflt=n
  2175.                 fi
  2176.                 rp="$what $value doesn't exist.  Use that name anyway?"
  2177.                 . UU/myread
  2178.                 dflt=''
  2179.                 case "$ans" in
  2180.                 y*) type='';;
  2181.                 *) echo " ";;
  2182.                 esac
  2183.                 ;;
  2184.             esac
  2185.             ;;
  2186.         esac
  2187.         ;;
  2188.     esac
  2189. done
  2190. cd UU
  2191. ans="$value"
  2192. rp="$orig_rp"
  2193. dflt="$orig_dflt"
  2194. rm -f getfile.ok
  2195. EOSC
  2196.  
  2197. : determine root of directory hierarchy where package will be installed.
  2198. case "$prefix" in
  2199. '')
  2200.     dflt=`./loc . /usr/local /usr/local /local /opt /usr`
  2201.     ;;
  2202. *)
  2203.     dflt="$prefix"
  2204.     ;;
  2205. esac
  2206. $cat <<EOM
  2207.  
  2208. By default, $package will be installed in $dflt/bin, manual
  2209. pages under $dflt/man, etc..., i.e. with $dflt as prefix for
  2210. all installation directories. Typically set to /usr/local, but you
  2211. may choose /usr if you wish to install $package among your system
  2212. binaries. If you wish to have binaries under /bin but manual pages
  2213. under /usr/local/man, that's ok: you will be prompted separately
  2214. for each of the installation directories, the prefix being only used
  2215. to set the defaults.
  2216.  
  2217. EOM
  2218. fn=d~
  2219. rp='Installation prefix to use?'
  2220. . ./getfile
  2221. oldprefix=''
  2222. case "$prefix" in
  2223. '') ;;
  2224. *)
  2225.     case "$ans" in
  2226.     "$prefix") ;;
  2227.     *) oldprefix="$prefix";;
  2228.     esac
  2229.     ;;
  2230. esac
  2231. prefix="$ans"
  2232. prefixexp="$ansexp"
  2233.  
  2234. : set the prefixit variable, to compute a suitable default value
  2235. prefixit='case "$3" in
  2236. ""|none)
  2237.     case "$oldprefix" in
  2238.     "") eval "$1=\"\$$2\"";;
  2239.     *)
  2240.         case "$3" in
  2241.         "") eval "$1=";;
  2242.         none)
  2243.             eval "tp=\"\$$2\"";
  2244.             case "$tp" in
  2245.             ""|" ") eval "$1=\"\$$2\"";;
  2246.             *) eval "$1=";;
  2247.             esac;;
  2248.         esac;;
  2249.     esac;;
  2250. *)
  2251.     eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
  2252.     case "$tp" in
  2253.     --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
  2254.     /*-$oldprefix/*|\~*-$oldprefix/*)
  2255.         eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
  2256.     *) eval "$1=\"\$$2\"";;
  2257.     esac;;
  2258. esac'
  2259.  
  2260. : determine where private library files go
  2261. : Usual default is /usr/local/lib/perl5.  Also allow things like 
  2262. : /opt/perl/lib, since /opt/perl/lib/perl5 would be redundant.
  2263. case "$prefix" in
  2264. *perl*) set dflt privlib lib ;;
  2265. *)     set dflt privlib lib/$package ;;
  2266. esac
  2267. eval $prefixit
  2268. $cat <<EOM
  2269.  
  2270. There are some auxiliary files for $package that need to be put into a
  2271. private library directory that is accessible by everyone.
  2272.  
  2273. EOM
  2274. fn=d~+
  2275. rp='Pathname where the private library files will reside?'
  2276. . ./getfile
  2277. if $test "X$privlibexp" != "X$ansexp"; then
  2278.     installprivlib=''
  2279. fi
  2280. privlib="$ans"
  2281. privlibexp="$ansexp"
  2282. if $afs; then
  2283.     $cat <<EOM
  2284.  
  2285. Since you are running AFS, I need to distinguish the directory in which
  2286. private files reside from the directory in which they are installed (and from
  2287. which they are presumably copied to the former directory by occult means).
  2288.  
  2289. EOM
  2290.     case "$installprivlib" in
  2291.     '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
  2292.     *) dflt="$installprivlib";;
  2293.     esac
  2294.     fn=de~
  2295.     rp='Where will private files be installed?'
  2296.     . ./getfile
  2297.     installprivlib="$ans"
  2298. else
  2299.     installprivlib="$privlibexp"
  2300. fi
  2301.  
  2302. : set the base revision
  2303. baserev=5.0
  2304.  
  2305. : get the patchlevel
  2306. echo " "
  2307. echo "Getting the current patchlevel..." >&4
  2308. if $test -r ../patchlevel.h;then
  2309.     patchlevel=`awk '/PATCHLEVEL/ {print $3}' < ../patchlevel.h`
  2310.     subversion=`awk '/SUBVERSION/ {print $3}' < ../patchlevel.h`
  2311. else
  2312.     patchlevel=0
  2313.     subversion=0
  2314. fi
  2315. echo "(You have $package $baserev PL$patchlevel sub$subversion.)"
  2316.  
  2317. : set the prefixup variable, to restore leading tilda escape
  2318. prefixup='case "$prefixexp" in
  2319. "$prefix") ;;
  2320. *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
  2321. esac'
  2322.  
  2323. : determine where public architecture dependent libraries go
  2324. set archlib archlib
  2325. eval $prefixit
  2326. case "$archlib" in
  2327. '')
  2328.     case "$privlib" in
  2329.     '')
  2330.         dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
  2331.         set dflt
  2332.         eval $prefixup
  2333.         ;;
  2334.     *)    version=`echo $baserev $patchlevel $subversion | \
  2335.             $awk '{print $1 + $2/1000.0 + $3/100000.0}'`
  2336.         dflt="$privlib/$archname/$version"
  2337.         ;;
  2338.     esac
  2339.     ;;
  2340. *) dflt="$archlib";;
  2341. esac
  2342. cat <<EOM
  2343.  
  2344. $spackage contains architecture-dependent library files.  If you are
  2345. sharing libraries in a heterogeneous environment, you might store
  2346. these files in a separate location.  Otherwise, you can just include
  2347. them with the rest of the public library files.
  2348.  
  2349. EOM
  2350. fn=d+~
  2351. rp='Where do you want to put the public architecture-dependent libraries?'
  2352. . ./getfile
  2353. archlib="$ans"
  2354. archlibexp="$ansexp"
  2355.  
  2356. if $afs; then
  2357.     $cat <<EOM
  2358.  
  2359. Since you are running AFS, I need to distinguish the directory in which
  2360. private files reside from the directory in which they are installed (and from
  2361. which they are presumably copied to the former directory by occult means).
  2362.  
  2363. EOM
  2364.     case "$installarchlib" in
  2365.     '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
  2366.     *) dflt="$installarchlib";;
  2367.     esac
  2368.     fn=de~
  2369.     rp='Where will architecture-dependent library files be installed?'
  2370.     . ./getfile
  2371.     installarchlib="$ans"
  2372. else
  2373.     installarchlib="$archlibexp"
  2374. fi
  2375. if $test X"$archlib" = X"$privlib"; then
  2376.     d_archlib="$undef"
  2377. else
  2378.     d_archlib="$define"
  2379. fi
  2380.  
  2381. : set up the script used to warn in case of inconsistency
  2382. cat <<'EOSC' >whoa
  2383. dflt=y
  2384. echo " "
  2385. echo "*** WHOA THERE!!! ***" >&4
  2386. echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
  2387. rp="    Keep the $hint value?"
  2388. . ./myread
  2389. case "$ans" in
  2390. y) td=$was; tu=$was;;
  2391. esac
  2392. EOSC
  2393.  
  2394. : function used to set $1 to $val
  2395. setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
  2396. case "$val$was" in
  2397. $define$undef) . ./whoa; eval "$var=\$td";;
  2398. $undef$define) . ./whoa; eval "$var=\$tu";;
  2399. *) eval "$var=$val";;
  2400. esac'
  2401.  
  2402. : make some quick guesses about what we are up against
  2403. echo " "
  2404. $echo $n "Hmm...  $c"
  2405. echo exit 1 >bsd
  2406. echo exit 1 >usg
  2407. echo exit 1 >v7
  2408. echo exit 1 >osf1
  2409. echo exit 1 >eunice
  2410. echo exit 1 >xenix
  2411. echo exit 1 >venix
  2412. d_bsd="$undef"
  2413. $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
  2414. if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
  2415. then
  2416.     echo "Looks kind of like an OSF/1 system, but we'll see..."
  2417.     echo exit 0 >osf1
  2418. elif test `echo abc | tr a-z A-Z` = Abc ; then
  2419.     xxx=`./loc addbib blurfl $pth`
  2420.     if $test -f $xxx; then
  2421.     echo "Looks kind of like a USG system with BSD features, but we'll see..."
  2422.         echo exit 0 >bsd
  2423.         echo exit 0 >usg
  2424.     else
  2425.         if $contains SIGTSTP foo >/dev/null 2>&1 ; then
  2426.             echo "Looks kind of like an extended USG system, but we'll see..."
  2427.         else
  2428.             echo "Looks kind of like a USG system, but we'll see..."
  2429.         fi
  2430.         echo exit 0 >usg
  2431.     fi
  2432. elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
  2433.     echo "Looks kind of like a BSD system, but we'll see..."
  2434.     d_bsd="$define"
  2435.     echo exit 0 >bsd
  2436. else
  2437.     echo "Looks kind of like a Version 7 system, but we'll see..."
  2438.     echo exit 0 >v7
  2439. fi
  2440. case "$eunicefix" in
  2441. *unixtovms*)
  2442.     $cat <<'EOI'
  2443. There is, however, a strange, musty smell in the air that reminds me of
  2444. something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
  2445. EOI
  2446.     echo exit 0 >eunice
  2447.     d_eunice="$define"
  2448. : it so happens the Eunice I know will not run shell scripts in Unix format
  2449.     ;;
  2450. *)
  2451.     echo " "
  2452.     echo "Congratulations.  You aren't running Eunice."
  2453.     d_eunice="$undef"
  2454.     ;;
  2455. esac
  2456. if test -f /xenix; then
  2457.     echo "Actually, this looks more like a XENIX system..."
  2458.     echo exit 0 >xenix
  2459.     d_xenix="$define"
  2460. else
  2461.     echo " "
  2462.     echo "It's not Xenix..."
  2463.     d_xenix="$undef"
  2464. fi
  2465. chmod +x xenix
  2466. $eunicefix xenix
  2467. if test -f /venix; then
  2468.     echo "Actually, this looks more like a VENIX system..."
  2469.     echo exit 0 >venix
  2470. else
  2471.     echo " "
  2472.     if ./xenix; then
  2473.         : null
  2474.     else
  2475.         echo "Nor is it Venix..."
  2476.     fi
  2477. fi
  2478. chmod +x bsd usg v7 osf1 eunice xenix venix
  2479. $eunicefix bsd usg v7 osf1 eunice xenix venix
  2480. $rm -f foo
  2481.  
  2482. : see if setuid scripts can be secure
  2483. $cat <<EOM
  2484.  
  2485. Some kernels have a bug that prevents setuid #! scripts from being
  2486. secure.  Some sites have disabled setuid #! scripts because of this.
  2487.  
  2488. First let's decide if your kernel supports secure setuid #! scripts.
  2489. (If setuid #! scripts would be secure but have been disabled anyway,
  2490. don't say that they are secure if asked.)
  2491.  
  2492. EOM
  2493.  
  2494. val="$undef"
  2495. if $test -d /dev/fd; then
  2496.     echo "#!$ls" >reflect
  2497.     chmod +x,u+s reflect
  2498.     ./reflect >flect 2>&1
  2499.     if $contains "/dev/fd" flect >/dev/null; then
  2500.         echo "Congratulations, your kernel has secure setuid scripts!" >&4
  2501.         val="$define"
  2502.     else
  2503.         $cat <<EOM
  2504. If you are not sure if they are secure, I can check but I'll need a
  2505. username and password different from the one you are using right now.
  2506. If you don't have such a username or don't want me to test, simply
  2507. enter 'none'.
  2508.  
  2509. EOM
  2510.         rp='Other username to test security of setuid scripts with?'
  2511.         dflt='none'
  2512.         . ./myread
  2513.         case "$ans" in
  2514.         n|none)
  2515.             case "$d_suidsafe" in
  2516.             '')    echo "I'll assume setuid scripts are *not* secure." >&4
  2517.                 dflt=n;;
  2518.             "$undef")
  2519.                 echo "Well, the $hint value is *not* secure." >&4
  2520.                 dflt=n;;
  2521.             *)    echo "Well, the $hint value *is* secure." >&4
  2522.                 dflt=y;;
  2523.             esac
  2524.             ;;
  2525.         *)
  2526.             $rm -f reflect flect
  2527.             echo "#!$ls" >reflect
  2528.             chmod +x,u+s reflect
  2529.             echo >flect
  2530.             chmod a+w flect
  2531.             echo '"su" will (probably) prompt you for '"$ans's password."
  2532.             su $ans -c './reflect >flect'
  2533.             if $contains "/dev/fd" flect >/dev/null; then
  2534.                 echo "Okay, it looks like setuid scripts are secure." >&4
  2535.                 dflt=y
  2536.             else
  2537.                 echo "I don't think setuid scripts are secure." >&4
  2538.                 dflt=n
  2539.             fi
  2540.             ;;
  2541.         esac
  2542.         rp='Does your kernel have *secure* setuid scripts?'
  2543.         . ./myread
  2544.         case "$ans" in
  2545.         [yY]*)    val="$define";;
  2546.         *)    val="$undef";;
  2547.         esac
  2548.     fi
  2549. else
  2550.     echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
  2551.     val="$undef"
  2552. fi
  2553. set d_suidsafe
  2554. eval $setvar
  2555.  
  2556. $rm -f reflect flect
  2557.  
  2558. : now see if they want to do setuid emulation
  2559. echo " "
  2560. val="$undef"
  2561. case "$d_suidsafe" in
  2562. "$define")
  2563.     val="$undef"
  2564.     echo "No need to emulate SUID scripts since they are secure here." >& 4
  2565.     ;;
  2566. *)
  2567.     $cat <<EOM
  2568. Some systems have disabled setuid scripts, especially systems where
  2569. setuid scripts cannot be secure.  On systems where setuid scripts have
  2570. been disabled, the setuid/setgid bits on scripts are currently
  2571. useless.  It is possible for $package to detect those bits and emulate
  2572. setuid/setgid in a secure fashion.  This emulation will only work if
  2573. setuid scripts have been disabled in your kernel.
  2574.  
  2575. EOM
  2576.     case "$d_dosuid" in
  2577.     "$define") dflt=y ;;
  2578.     *) dflt=n ;;
  2579.     esac
  2580.     rp="Do you want to do setuid/setgid emulation?"
  2581.     . ./myread
  2582.     case "$ans" in
  2583.     [yY]*)    val="$define";;
  2584.     *)    val="$undef";;
  2585.     esac
  2586.     ;;
  2587. esac
  2588. set d_dosuid
  2589. eval $setvar
  2590.  
  2591. : determine where site specific libraries go.
  2592. set sitelib sitelib
  2593. eval $prefixit
  2594. case "$sitelib" in
  2595. '')    dflt="$privlib/site_perl" ;;
  2596. *)    dflt="$sitelib" ;;
  2597. esac
  2598. $cat <<EOM
  2599.  
  2600. The installation process will also create a directory for
  2601. site-specific extensions and modules.  Some users find it convenient
  2602. to place all local files in this directory rather than in the main
  2603. distribution directory.
  2604.  
  2605. EOM
  2606. fn=d~+
  2607. rp='Pathname for the site-specific library files?'
  2608. . ./getfile
  2609. if $test "X$sitelibexp" != "X$ansexp"; then
  2610.     installsitelib=''
  2611. fi
  2612. sitelib="$ans"
  2613. sitelibexp="$ansexp"
  2614. if $afs; then
  2615.     $cat <<EOM
  2616.  
  2617. Since you are running AFS, I need to distinguish the directory in which
  2618. private files reside from the directory in which they are installed (and from
  2619. which they are presumably copied to the former directory by occult means).
  2620.  
  2621. EOM
  2622.     case "$installsitelib" in
  2623.     '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
  2624.     *) dflt="$installsitelib";;
  2625.     esac
  2626.     fn=de~
  2627.     rp='Where will private files be installed?'
  2628.     . ./getfile
  2629.     installsitelib="$ans"
  2630. else
  2631.     installsitelib="$sitelibexp"
  2632. fi
  2633.  
  2634. : determine where site specific architecture-dependent libraries go.
  2635. xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
  2636. : xxx is usuually lib/site_perl/archname.
  2637. set sitearch sitearch none
  2638. eval $prefixit
  2639. case "$sitearch" in
  2640. '')    dflt="$sitelib/$archname" ;;
  2641. *)    dflt="$sitearch" ;;
  2642. esac
  2643. $cat <<EOM
  2644.  
  2645. The installation process will also create a directory for
  2646. architecture-dependent site-specific extensions and modules.
  2647.  
  2648. EOM
  2649. fn=nd~+
  2650. rp='Pathname for the site-specific architecture-dependent library files?'
  2651. . ./getfile
  2652. if $test "X$sitearchexp" != "X$ansexp"; then
  2653.     installsitearch=''
  2654. fi
  2655. sitearch="$ans"
  2656. sitearchexp="$ansexp"
  2657. if $afs; then
  2658.     $cat <<EOM
  2659.  
  2660. Since you are running AFS, I need to distinguish the directory in which
  2661. private files reside from the directory in which they are installed (and from
  2662. which they are presumably copied to the former directory by occult means).
  2663.  
  2664. EOM
  2665.     case "$installsitearch" in
  2666.     '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
  2667.     *) dflt="$installsitearch";;
  2668.     esac
  2669.     fn=de~
  2670.     rp='Where will private files be installed?'
  2671.     . ./getfile
  2672.     installsitearch="$ans"
  2673. else
  2674.     installsitearch="$sitearchexp"
  2675. fi
  2676.  
  2677. : determine where old public architecture dependent libraries might be
  2678. case "$oldarchlib" in
  2679. '')    case "$privlib" in
  2680.     '') ;;
  2681.     *)    dflt="$privlib/$archname"
  2682.         ;;
  2683.     esac
  2684.     ;;
  2685. *)    dflt="$oldarchlib" 
  2686.     ;;
  2687. esac
  2688. if $test ! -d "$dflt/auto"; then
  2689.     dflt=none
  2690. fi
  2691. cat <<EOM
  2692.  
  2693. In 5.001, Perl stored architecture-dependent library files in a library
  2694. with a name such as $privlib/$archname, 
  2695. and this directory contained files from the standard extensions and 
  2696. files from any additional extensions you might have added.  Starting 
  2697. with version 5.002, all the architecture-dependent standard extensions 
  2698. will go into $archlib, 
  2699. while locally-added extensions will go into
  2700. $sitearch.
  2701.  
  2702. If you wish Perl to continue to search the old architecture-dependent
  2703. library for your local extensions, give the path to that directory.
  2704. If you do not wish to use your old architecture-dependent library
  2705. files, answer 'none'.
  2706.  
  2707. EOM
  2708. fn=dn~
  2709. rp='Directory for your old 5.001 architecture-dependent libraries?'
  2710. . ./getfile
  2711. oldarchlib="$ans"
  2712. oldarchlibexp="$ansexp"
  2713. case "$oldarchlib" in
  2714. ''|' ') val="$undef" ;;
  2715. *) val="$define" ;;
  2716. esac
  2717. set d_oldarchlib
  2718. eval $setvar
  2719.  
  2720. : determine where public executables go
  2721. echo " "
  2722. set dflt bin bin
  2723. eval $prefixit
  2724. fn=d~
  2725. rp='Pathname where the public executables will reside?'
  2726. . ./getfile
  2727. if $test "X$ansexp" != "X$binexp"; then
  2728.     installbin=''
  2729. fi
  2730. bin="$ans"
  2731. binexp="$ansexp"
  2732. if $afs; then
  2733.     $cat <<EOM
  2734.  
  2735. Since you are running AFS, I need to distinguish the directory in which
  2736. executables reside from the directory in which they are installed (and from
  2737. which they are presumably copied to the former directory by occult means).
  2738.  
  2739. EOM
  2740.     case "$installbin" in
  2741.     '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
  2742.     *) dflt="$installbin";;
  2743.     esac
  2744.     fn=de~
  2745.     rp='Where will public executables be installed?'
  2746.     . ./getfile
  2747.     installbin="$ans"
  2748. else
  2749.     installbin="$binexp"
  2750. fi
  2751.  
  2752. : determine where manual pages are on this system
  2753. echo " "
  2754. case "$sysman" in
  2755. '') 
  2756.     syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
  2757.     syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
  2758.     syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
  2759.     syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
  2760.     syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
  2761.     sysman=`./loc . /usr/man/man1 $syspath`
  2762.     ;;
  2763. esac
  2764. if $test -d "$sysman"; then
  2765.     echo "System manual is in $sysman." >&4
  2766. else
  2767.     echo "Could not find manual pages in source form." >&4
  2768. fi
  2769.  
  2770. : determine where manual pages go
  2771. set man1dir man1dir none
  2772. eval $prefixit
  2773. $cat <<EOM
  2774.  
  2775. $spackage has manual pages available in source form.
  2776. EOM
  2777. case "$nroff" in
  2778. nroff)
  2779.     echo "However, you don't have nroff, so they're probably useless to you."
  2780.     case "$man1dir" in
  2781.     '') man1dir="none";;
  2782.     esac;;
  2783. esac
  2784. echo "If you don't want the manual sources installed, answer 'none'."
  2785. case "$man1dir" in
  2786. ' ') dflt=none
  2787.     ;;
  2788. '')
  2789.     lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
  2790.     lookpath="$lookpath $prefixexp/man/p_man/man1"
  2791.     lookpath="$lookpath $prefixexp/man/u_man/man1"
  2792.     lookpath="$lookpath $prefixexp/man/man.1"
  2793.     : If prefix contains 'perl' then we want to keep the man pages
  2794.     : under the prefix directory.  Otherwise, look in a variety of
  2795.     : other possible places.  This is debatable, but probably a
  2796.     : good compromise.  Well, apparently not.
  2797.     : Experience has shown people expect man1dir to be under prefix,
  2798.     : so we now always put it there.  Users who want other behavior
  2799.     : can answer interactively or use a command line option.
  2800.     : Does user have System V-style man paths.
  2801.     case "$sysman" in
  2802.     */?_man*)    dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
  2803.     *)    dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
  2804.     esac
  2805.     set dflt
  2806.     eval $prefixup
  2807.     ;;
  2808. *)  dflt="$man1dir"
  2809.     ;;
  2810. esac
  2811. echo " "
  2812. fn=dn+~
  2813. rp="Where do the main $spackage manual pages (source) go?"
  2814. . ./getfile
  2815. if $test "X$man1direxp" != "X$ansexp"; then
  2816.     installman1dir=''
  2817. fi
  2818. man1dir="$ans"
  2819. man1direxp="$ansexp"
  2820. case "$man1dir" in
  2821. '') man1dir=' '
  2822.     installman1dir='';;
  2823. esac
  2824. if $afs; then
  2825.     $cat <<EOM
  2826.  
  2827. Since you are running AFS, I need to distinguish the directory in which
  2828. manual pages reside from the directory in which they are installed (and from
  2829. which they are presumably copied to the former directory by occult means).
  2830.  
  2831. EOM
  2832.     case "$installman1dir" in
  2833.     '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
  2834.     *) dflt="$installman1dir";;
  2835.     esac
  2836.     fn=de~
  2837.     rp='Where will man pages be installed?'
  2838.     . ./getfile
  2839.     installman1dir="$ans"
  2840. else
  2841.     installman1dir="$man1direxp"
  2842. fi
  2843.  
  2844. : What suffix to use on installed man pages
  2845.  
  2846. case "$man1dir" in
  2847. ' ')
  2848.     man1ext='0'
  2849.     ;;
  2850. *)
  2851.     rp="What suffix should be used for the main $spackage man pages?"
  2852.     case "$man1ext" in
  2853.     '')    case "$man1dir" in
  2854.         *1)  dflt=1 ;;
  2855.         *1p) dflt=1p ;;
  2856.         *1pm) dflt=1pm ;;
  2857.         *l) dflt=l;;
  2858.         *n) dflt=n;;
  2859.         *o) dflt=o;;
  2860.         *p) dflt=p;;
  2861.         *C) dflt=C;;
  2862.         *L) dflt=L;;
  2863.         *L1) dflt=L1;;
  2864.         *) dflt=1;;
  2865.         esac
  2866.         ;;
  2867.     *)    dflt="$man1ext";;
  2868.     esac
  2869.     . ./myread
  2870.     man1ext="$ans"
  2871.     ;;
  2872. esac
  2873.  
  2874. : see if we can have long filenames
  2875. echo " "
  2876. rmlist="$rmlist /tmp/cf$$"
  2877. $test -d /tmp/cf$$ || mkdir /tmp/cf$$
  2878. first=123456789abcdef
  2879. second=/tmp/cf$$/$first
  2880. $rm -f $first $second
  2881. if (echo hi >$first) 2>/dev/null; then
  2882.     if $test -f 123456789abcde; then
  2883.         echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
  2884.         val="$undef"
  2885.     else
  2886.         if (echo hi >$second) 2>/dev/null; then
  2887.             if $test -f /tmp/cf$$/123456789abcde; then
  2888.                 $cat <<'EOM'
  2889. That's peculiar... You can have filenames longer than 14 characters, but only
  2890. on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
  2891. I shall consider your system cannot support long filenames at all.
  2892. EOM
  2893.                 val="$undef"
  2894.             else
  2895.                 echo 'You can have filenames longer than 14 characters.' >&4
  2896.                 val="$define"
  2897.             fi
  2898.         else
  2899.             $cat <<'EOM'
  2900. How confusing! Some of your filesystems are sane enough to allow filenames
  2901. longer than 14 characters but some others like /tmp can't even think about them.
  2902. So, for now on, I shall assume your kernel does not allow them at all.
  2903. EOM
  2904.             val="$undef"
  2905.         fi
  2906.     fi
  2907. else
  2908.     $cat <<'EOM'
  2909. You can't have filenames longer than 14 chars.  You can't even think about them!
  2910. EOM
  2911.     val="$undef"
  2912. fi 
  2913. set d_flexfnam
  2914. eval $setvar
  2915. $rm -rf /tmp/cf$$ 123456789abcde*
  2916.  
  2917. : determine where library module manual pages go
  2918. set man3dir man3dir none
  2919. eval $prefixit
  2920. $cat <<EOM
  2921.  
  2922. $spackage has manual pages for many of the library modules.
  2923. EOM
  2924.  
  2925. case "$nroff" in
  2926. nroff)
  2927.     $cat <<'EOM'
  2928. However, you don't have nroff, so they're probably useless to you.
  2929. You can use the supplied perldoc script instead.
  2930. EOM
  2931.     case "$man3dir" in
  2932.     '') man3dir="none";;
  2933.     esac;;
  2934. esac
  2935.  
  2936. case "$d_flexfnam" in
  2937. undef)
  2938.     $cat <<'EOM'
  2939. However, your system can't handle the long file names like File::Basename.3. 
  2940. You can use the supplied perldoc script instead.
  2941. EOM
  2942.     case "$man3dir" in
  2943.     '') man3dir="none";;
  2944.     esac;;
  2945. esac
  2946.  
  2947. echo "If you don't want the manual sources installed, answer 'none'."
  2948. : We dont use /usr/local/man/man3 because some man programs will
  2949. : only show the /usr/local/man/man3 contents, and not the system ones,
  2950. : thus man less will show the perl module less.pm, but not the system
  2951. : less command.  We might also conflict with TCL man pages.
  2952. : However, something like /opt/perl/man/man3 is fine.
  2953. case "$man3dir" in
  2954. '')    case "$prefix" in 
  2955.     *perl*) dflt=`echo $man1dir | 
  2956.             $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
  2957.     *)    dflt="$privlib/man/man3" ;;
  2958.     esac
  2959.     ;;
  2960. ' ') dflt=none;;
  2961. *)    dflt="$man3dir" ;;
  2962. esac
  2963. echo " "
  2964.  
  2965. fn=dn+~
  2966. rp="Where do the $spackage library man pages (source) go?"
  2967. . ./getfile
  2968. if test "X$man3direxp" != "X$ansexp"; then
  2969.     installman3dir=''
  2970. fi
  2971.  
  2972. man3dir="$ans"
  2973. man3direxp="$ansexp"
  2974. case "$man3dir" in
  2975. '') man3dir=' '
  2976.     installman3dir='';;
  2977. esac
  2978. if $afs; then
  2979.     $cat <<EOM
  2980.  
  2981. Since you are running AFS, I need to distinguish the directory in which
  2982. manual pages reside from the directory in which they are installed (and from
  2983. which they are presumably copied to the former directory by occult means).
  2984.  
  2985. EOM
  2986.     case "$installman3dir" in
  2987.     '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
  2988.     *) dflt="$installman3dir";;
  2989.     esac
  2990.     fn=de~
  2991.     rp='Where will man pages be installed?'
  2992.     . ./getfile
  2993.     installman3dir="$ans"
  2994. else
  2995.     installman3dir="$man3direxp"
  2996. fi
  2997.  
  2998. : What suffix to use on installed man pages
  2999.  
  3000. case "$man3dir" in
  3001. ' ')
  3002.     man3ext='0'
  3003.     ;;
  3004. *)
  3005.     rp="What suffix should be used for the $spackage library man pages?"
  3006.     case "$man3ext" in
  3007.     '')    case "$man3dir" in
  3008.         *3)  dflt=3 ;;
  3009.         *3p) dflt=3p ;;
  3010.         *3pm) dflt=3pm ;;
  3011.         *l) dflt=l;;
  3012.         *n) dflt=n;;
  3013.         *o) dflt=o;;
  3014.         *p) dflt=p;;
  3015.         *C) dflt=C;;
  3016.         *L) dflt=L;;
  3017.         *L3) dflt=L3;;
  3018.         *) dflt=3;;
  3019.         esac
  3020.         ;;
  3021.     *)    dflt="$man3ext";;
  3022.     esac
  3023.     . ./myread
  3024.     man3ext="$ans"
  3025.     ;;
  3026. esac
  3027.  
  3028. : see what memory models we can support
  3029. case "$models" in
  3030. '')
  3031.     $cat >pdp11.c <<'EOP'
  3032. main() {
  3033. #ifdef pdp11
  3034.     exit(0);
  3035. #else
  3036.     exit(1);
  3037. #endif
  3038. }
  3039. EOP
  3040.     cc -o pdp11 pdp11.c >/dev/null 2>&1
  3041.     if ./pdp11 2>/dev/null; then
  3042.         dflt='unsplit split'
  3043.     else
  3044.         tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
  3045.         case "$tans" in
  3046.         X) dflt='none';;
  3047.         *) if $test -d /lib/small || $test -d /usr/lib/small; then
  3048.                 dflt='small'
  3049.             else
  3050.                 dflt=''
  3051.             fi
  3052.             if $test -d /lib/medium || $test -d /usr/lib/medium; then
  3053.                 dflt="$dflt medium"
  3054.             fi
  3055.             if $test -d /lib/large || $test -d /usr/lib/large; then
  3056.                 dflt="$dflt large"
  3057.             fi
  3058.             if $test -d /lib/huge || $test -d /usr/lib/huge; then
  3059.                 dflt="$dflt huge"
  3060.             fi
  3061.         esac
  3062.     fi;;
  3063. *) dflt="$models";;
  3064. esac
  3065. $cat <<EOM
  3066.  
  3067. Some systems have different model sizes.  On most systems they are called
  3068. small, medium, large, and huge.  On the PDP11 they are called unsplit and
  3069. split.  If your system doesn't support different memory models, say "none".
  3070. If you wish to force everything to one memory model, say "none" here and
  3071. put the appropriate flags later when it asks you for other cc and ld flags.
  3072. Venix systems may wish to put "none" and let the compiler figure things out.
  3073. (In the following question multiple model names should be space separated.)
  3074.  
  3075. EOM
  3076. rp="Which memory models are supported?"
  3077. . ./myread
  3078. models="$ans"
  3079.  
  3080. case "$models" in
  3081. none)
  3082.     small=''
  3083.     medium=''
  3084.     large=''
  3085.     huge=''
  3086.     unsplit=''
  3087.     split=''
  3088.     ;;
  3089. *split)
  3090.     case "$split" in
  3091.     '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
  3092.              $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
  3093.             dflt='-i'
  3094.         else
  3095.             dflt='none'
  3096.         fi;;
  3097.     *) dflt="$split";;
  3098.     esac
  3099.     rp="What flag indicates separate I and D space?"
  3100.     . ./myread
  3101.     tans="$ans"
  3102.     case "$tans" in
  3103.     none) tans='';;
  3104.     esac
  3105.     split="$tans"
  3106.     unsplit='';;
  3107. *large*|*small*|*medium*|*huge*)
  3108.     case "$models" in
  3109.     *large*)
  3110.         case "$large" in
  3111.         '') dflt='-Ml';;
  3112.         *) dflt="$large";;
  3113.         esac
  3114.     rp="What flag indicates large model?"
  3115.     . ./myread
  3116.     tans="$ans"
  3117.     case "$tans" in
  3118.     none) tans='';
  3119.     esac
  3120.     large="$tans";;
  3121.     *) large='';;
  3122.     esac
  3123.     case "$models" in
  3124.     *huge*) case "$huge" in
  3125.         '') dflt='-Mh';;
  3126.         *) dflt="$huge";;
  3127.         esac
  3128.         rp="What flag indicates huge model?"
  3129.         . ./myread
  3130.         tans="$ans"
  3131.         case "$tans" in
  3132.         none) tans='';
  3133.         esac
  3134.         huge="$tans";;
  3135.     *) huge="$large";;
  3136.     esac
  3137.     case "$models" in
  3138.     *medium*) case "$medium" in
  3139.         '') dflt='-Mm';;
  3140.         *) dflt="$medium";;
  3141.         esac
  3142.         rp="What flag indicates medium model?"
  3143.         . ./myread
  3144.         tans="$ans"
  3145.         case "$tans" in
  3146.         none) tans='';
  3147.         esac
  3148.         medium="$tans";;
  3149.     *) medium="$large";;
  3150.     esac
  3151.     case "$models" in
  3152.     *small*) case "$small" in
  3153.         '') dflt='none';;
  3154.         *) dflt="$small";;
  3155.         esac
  3156.         rp="What flag indicates small model?"
  3157.         . ./myread
  3158.         tans="$ans"
  3159.         case "$tans" in
  3160.         none) tans='';
  3161.         esac
  3162.         small="$tans";;
  3163.     *) small='';;
  3164.     esac
  3165.     ;;
  3166. *)
  3167.     echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
  3168.     ;;
  3169. esac
  3170.  
  3171. : see if we need a special compiler
  3172. echo " "
  3173. if ./usg; then
  3174.     case "$cc" in
  3175.     '') case "$Mcc" in
  3176.         /*) dflt='Mcc';;
  3177.         *) case "$large" in
  3178.             -M*) dflt='cc';;
  3179.             *)    if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
  3180.                     if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
  3181.                         dflt='cc'
  3182.                     else
  3183.                         dflt='cc -M'
  3184.                     fi
  3185.                 else
  3186.                     dflt='cc'
  3187.                 fi;;
  3188.             esac;;
  3189.         esac;;
  3190.     *)  dflt="$cc";;
  3191.     esac
  3192.     $cat <<'EOM'
  3193. On some systems the default C compiler will not resolve multiple global
  3194. references that happen to have the same name.  On some such systems the "Mcc"
  3195. command may be used to force these to be resolved.  On other systems a "cc -M"
  3196. command is required.  (Note that the -M flag on other systems indicates a
  3197. memory model to use!) If you have the Gnu C compiler, you might wish to use
  3198. that instead.
  3199.  
  3200. EOM
  3201.     rp="What command will force resolution on this system?"
  3202.     . ./myread
  3203.     cc="$ans"
  3204. else
  3205.     case "$cc" in
  3206.     '') dflt=cc;;
  3207.     *) dflt="$cc";;
  3208.     esac
  3209.     rp="Use which C compiler?"
  3210.     . ./myread
  3211.     cc="$ans"
  3212. fi
  3213. echo " "
  3214. echo "Checking for GNU cc in disguise and/or its version number..." >&4
  3215. $cat >gccvers.c <<EOM
  3216. #include <stdio.h>
  3217. int main() {
  3218. #ifdef __GNUC__
  3219. #ifdef __VERSION__
  3220.     printf("%s\n", __VERSION__);
  3221. #else
  3222.     printf("%s\n", "1");
  3223. #endif
  3224. #endif
  3225.     exit(0);
  3226. }
  3227. EOM
  3228. if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
  3229.     gccversion=`./gccvers`
  3230.     case "$gccversion" in
  3231.     '') echo "You are not using GNU cc." ;;
  3232.     *)  echo "You are using GNU cc $gccversion." ;;
  3233.     esac
  3234. else
  3235.     echo " "
  3236.     echo "*** WHOA THERE!!! ***" >&4
  3237.     echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
  3238.     case "$knowitall" in
  3239.     '')
  3240.     echo "    You'd better start hunting for one and let me know about it." >&4
  3241.         exit 1
  3242.         ;;
  3243.     esac
  3244. fi
  3245. $rm -f gccvers*
  3246. case "$gccversion" in
  3247. 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
  3248. esac
  3249.  
  3250. : What should the include directory be ?
  3251. echo " "
  3252. $echo $n "Hmm...  $c"
  3253. dflt='/usr/include'
  3254. incpath=''
  3255. mips_type=''
  3256. if $test -f /bin/mips && /bin/mips; then
  3257.     echo "Looks like a MIPS system..."
  3258.     $cat >usr.c <<'EOCP'
  3259. #ifdef SYSTYPE_BSD43
  3260. /bsd43
  3261. #endif
  3262. EOCP
  3263.     if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
  3264.         dflt='/bsd43/usr/include'
  3265.         incpath='/bsd43'
  3266.         mips_type='BSD 4.3'
  3267.     else
  3268.         mips_type='System V'
  3269.     fi
  3270.     $rm -f usr.c usr.out
  3271.     echo "and you're compiling with the $mips_type compiler and libraries."
  3272.     xxx_prompt=y
  3273.     echo "exit 0" >mips
  3274. else
  3275.     echo "Doesn't look like a MIPS system."
  3276.     xxx_prompt=n
  3277.     echo "exit 1" >mips
  3278. fi
  3279. chmod +x mips
  3280. $eunicefix mips
  3281. echo " "
  3282. case "$usrinc" in
  3283. '') ;;
  3284. *) dflt="$usrinc";;
  3285. esac
  3286. case "$xxx_prompt" in
  3287. y)    fn=d/
  3288.     rp='Where are the include files you want to use?'
  3289.     . ./getfile
  3290.     usrinc="$ans"
  3291.     ;;
  3292. *)    usrinc="$dflt"
  3293.     ;;
  3294. esac
  3295.  
  3296. : see if we have to deal with yellow pages, now NIS.
  3297. if $test -d /usr/etc/yp || $test -d /etc/yp; then
  3298.     if $test -f /usr/etc/nibindd; then
  3299.         echo " "
  3300.         echo "I'm fairly confident you're on a NeXT."
  3301.         echo " "
  3302.         rp='Do you get the hosts file via NetInfo?'
  3303.         dflt=y
  3304.         case "$hostcat" in
  3305.         nidump*) ;;
  3306.         '') ;;
  3307.         *) dflt=n;;
  3308.         esac
  3309.         . ./myread
  3310.         case "$ans" in
  3311.         y*) hostcat='nidump hosts .';;
  3312.         *)    case "$hostcat" in
  3313.             nidump*) hostcat='';;
  3314.             esac
  3315.             ;;
  3316.         esac
  3317.     fi
  3318.     case "$hostcat" in
  3319.     nidump*) ;;
  3320.     *)
  3321.         case "$hostcat" in
  3322.         *ypcat*) dflt=y;;
  3323.         '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
  3324.                 dflt=y
  3325.             else
  3326.                 dflt=n
  3327.             fi;;
  3328.         *) dflt=n;;
  3329.         esac
  3330.         echo " "
  3331.         rp='Are you getting the hosts file via yellow pages?'
  3332.         . ./myread
  3333.         case "$ans" in
  3334.         y*) hostcat='ypcat hosts';;
  3335.         *) hostcat='cat /etc/hosts';;
  3336.         esac
  3337.         ;;
  3338.     esac
  3339. fi
  3340.  
  3341. : now get the host name
  3342. echo " "
  3343. echo "Figuring out host name..." >&4
  3344. case "$myhostname" in
  3345. '') cont=true
  3346.     echo 'Maybe "hostname" will work...'
  3347.     if tans=`sh -c hostname 2>&1` ; then
  3348.         myhostname=$tans
  3349.         phostname=hostname
  3350.         cont=''
  3351.     fi
  3352.     ;;
  3353. *) cont='';;
  3354. esac
  3355. if $test "$cont"; then
  3356.     if ./xenix; then
  3357.         echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
  3358.         if tans=`cat /etc/systemid 2>&1` ; then
  3359.             myhostname=$tans
  3360.             phostname='cat /etc/systemid'
  3361.             echo "Whadyaknow.  Xenix always was a bit strange..."
  3362.             cont=''
  3363.         fi
  3364.     elif $test -r /etc/systemid; then
  3365.         echo "(What is a non-Xenix system doing with /etc/systemid?)"
  3366.     fi
  3367. fi
  3368. if $test "$cont"; then
  3369.     echo 'No, maybe "uuname -l" will work...'
  3370.     if tans=`sh -c 'uuname -l' 2>&1` ; then
  3371.         myhostname=$tans
  3372.         phostname='uuname -l'
  3373.     else
  3374.         echo 'Strange.  Maybe "uname -n" will work...'
  3375.         if tans=`sh -c 'uname -n' 2>&1` ; then
  3376.             myhostname=$tans
  3377.             phostname='uname -n'
  3378.         else
  3379.             echo 'Oh well, maybe I can mine it out of whoami.h...'
  3380.             if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
  3381.                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
  3382.                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
  3383.             else
  3384.                 case "$myhostname" in
  3385.                 '') echo "Does this machine have an identity crisis or something?"
  3386.                     phostname='';;
  3387.                 *)
  3388.                     echo "Well, you said $myhostname before..."
  3389.                     phostname='echo $myhostname';;
  3390.                 esac
  3391.             fi
  3392.         fi
  3393.     fi
  3394. fi
  3395. : you do not want to know about this
  3396. set $myhostname
  3397. myhostname=$1
  3398.  
  3399. : verify guess
  3400. if $test "$myhostname" ; then
  3401.     dflt=y
  3402.     rp='Your host name appears to be "'$myhostname'".'" Right?"
  3403.     . ./myread
  3404.     case "$ans" in
  3405.     y*) ;;
  3406.     *) myhostname='';;
  3407.     esac
  3408. fi
  3409.  
  3410. : bad guess or no guess
  3411. while $test "X$myhostname" = X ; do
  3412.     dflt=''
  3413.     rp="Please type the (one word) name of your host:"
  3414.     . ./myread
  3415.     myhostname="$ans"
  3416. done
  3417.  
  3418. : translate upper to lower if necessary
  3419. case "$myhostname" in
  3420. *[A-Z]*)
  3421.     echo "(Normalizing case in your host name)"
  3422.     myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
  3423.     ;;
  3424. esac
  3425.  
  3426. case "$myhostname" in
  3427. *.*)
  3428.     dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
  3429.     myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
  3430.     echo "(Trimming domain name from host name--host name is now $myhostname)"
  3431.     ;;
  3432. *) case "$mydomain" in
  3433.     '')
  3434.         {
  3435.             : If we use NIS, try ypmatch.
  3436.             : Is there some reason why this was not done before?
  3437.             test "X$hostcat" = "Xypcat hosts" &&
  3438.             ypmatch "$myhostname" hosts 2>/dev/null |\
  3439.                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
  3440.             $test -s hosts
  3441.         } || {
  3442.             : Extract only the relevant hosts, reducing file size,
  3443.             : remove comments, insert trailing space for later use.
  3444.                  $hostcat | $sed -n -e "s/[     ]*#.*//; s/\$/ /
  3445.                     /[     ]$myhostname[    . ]/p" > hosts
  3446.         }
  3447.         tmp_re="[    . ]"
  3448.         $test x`$awk "/[0-9].*[     ]$myhostname$tmp_re/ { sum++ }
  3449.                  END { print sum }" hosts` = x1 || tmp_re="[     ]"
  3450.         dflt=.`$awk "/[0-9].*[     ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
  3451.             hosts | $sort | $uniq | \
  3452.             $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
  3453.         case `$echo X$dflt` in
  3454.         X*\ *)    echo "(Several hosts in /etc/hosts matched hostname)"
  3455.             dflt=.
  3456.             ;;
  3457.         .) echo "(You do not have fully-qualified names in /etc/hosts)"
  3458.             ;;
  3459.         esac
  3460.         case "$dflt" in
  3461.         .)
  3462.             tans=`./loc resolv.conf X /etc /usr/etc`
  3463.             if $test -f "$tans"; then
  3464.                 echo "(Attempting domain name extraction from $tans)"
  3465.                 : Why was there an Egrep here, when Sed works?
  3466.                 dflt=.`$sed -n -e 's/^domain[     ]*\(.*\)/\1/p' $tans \
  3467.                     | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
  3468.             fi
  3469.             ;;
  3470.         esac
  3471.         case "$dflt" in
  3472.         .) echo "(No help from resolv.conf either -- attempting clever guess)"
  3473.             dflt=.`sh -c domainname 2>/dev/null`
  3474.             case "$dflt" in
  3475.             '') dflt='.';;
  3476.             .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
  3477.             esac
  3478.             ;;
  3479.         esac
  3480.         case "$dflt" in
  3481.         .) echo "(Lost all hope -- silly guess then)"
  3482.             dflt='.uucp'
  3483.             ;;
  3484.         esac
  3485.         $rm -f hosts
  3486.         ;;
  3487.     *) dflt="$mydomain";;
  3488.     esac;;
  3489. esac
  3490. echo " "
  3491. rp="What is your domain name?"
  3492. . ./myread
  3493. tans="$ans"
  3494. case "$ans" in
  3495. '') ;;
  3496. .*) ;;
  3497. *) tans=".$tans";;
  3498. esac
  3499. mydomain="$tans"
  3500.  
  3501. : translate upper to lower if necessary
  3502. case "$mydomain" in
  3503. *[A-Z]*)
  3504.     echo "(Normalizing case in your domain name)"
  3505.     mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
  3506.     ;;
  3507. esac
  3508.  
  3509. : a little sanity check here
  3510. case "$phostname" in
  3511. '') ;;
  3512. *)
  3513.     case `$phostname | ./tr '[A-Z]' '[a-z]'` in
  3514.     $myhostname$mydomain|$myhostname) ;;
  3515.     *)
  3516.         case "$phostname" in
  3517.         sed*)
  3518.             echo "(That doesn't agree with your whoami.h file, by the way.)"
  3519.             ;;
  3520.         *)
  3521.             echo "(That doesn't agree with your $phostname command, by the way.)"
  3522.             ;;
  3523.         esac
  3524.     ;;
  3525.     esac
  3526.     ;;
  3527. esac
  3528.  
  3529. $cat <<EOM
  3530.  
  3531. I need to get your e-mail address in Internet format if possible, i.e.
  3532. something like user@host.domain. Please answer accurately since I have
  3533. no easy means to double check it. The default value provided below
  3534. is most probably close to the reality but may not be valid from outside
  3535. your organization...
  3536.  
  3537. EOM
  3538. cont=x
  3539. while test "$cont"; do
  3540.     case "$cf_email" in
  3541.     '') dflt="$cf_by@$myhostname$mydomain";;
  3542.     *) dflt="$cf_email";;
  3543.     esac
  3544.     rp='What is your e-mail address?'
  3545.     . ./myread
  3546.     cf_email="$ans"
  3547.     case "$cf_email" in
  3548.     *@*.*) cont='' ;;
  3549.     *)
  3550.         rp='Address does not look like an Internet one.  Use it anyway?'
  3551.         case "$fastread" in
  3552.         yes) dflt=y ;;
  3553.         *) dflt=n ;;
  3554.         esac
  3555.         . ./myread
  3556.         case "$ans" in
  3557.         y*) cont='' ;;
  3558.         *) echo " " ;;
  3559.         esac
  3560.         ;;
  3561.     esac
  3562. done
  3563.  
  3564. $cat <<EOM
  3565.  
  3566. If you or somebody else will be maintaining perl at your site, please
  3567. fill in the correct e-mail address here so that they may be contacted
  3568. if necessary. Currently, the "perlbug" program included with perl
  3569. will send mail to this address in addition to perlbug@perl.com. You may
  3570. enter "none" for no administrator.
  3571.  
  3572. EOM
  3573. case "$perladmin" in
  3574. '') dflt="$cf_email";;
  3575. *) dflt="$perladmin";;
  3576. esac
  3577. rp='Perl administrator e-mail address'
  3578. . ./myread
  3579. perladmin="$ans"
  3580.  
  3581. : determine where public executable scripts go
  3582. set scriptdir scriptdir
  3583. eval $prefixit
  3584. case "$scriptdir" in
  3585. '')
  3586.     dflt="$bin"
  3587.     : guess some guesses
  3588.     $test -d /usr/share/scripts && dflt=/usr/share/scripts
  3589.     $test -d /usr/share/bin && dflt=/usr/share/bin
  3590.     $test -d /usr/local/script && dflt=/usr/local/script
  3591.     $test -d $prefixexp/script && dflt=$prefixexp/script
  3592.     set dflt
  3593.     eval $prefixup
  3594.     ;;
  3595. *)  dflt="$scriptdir"
  3596.     ;;
  3597. esac
  3598. $cat <<EOM
  3599.  
  3600. Some installations have a separate directory just for executable scripts so
  3601. that they can mount it across multiple architectures but keep the scripts in
  3602. one spot.  You might, for example, have a subdirectory of /usr/share for this.
  3603. Or you might just lump your scripts in with all your other executables.
  3604.  
  3605. EOM
  3606. fn=d~
  3607. rp='Where do you keep publicly executable scripts?'
  3608. . ./getfile
  3609. if $test "X$ansexp" != "X$scriptdirexp"; then
  3610.     installscript=''
  3611. fi
  3612. scriptdir="$ans"
  3613. scriptdirexp="$ansexp"
  3614. if $afs; then
  3615.     $cat <<EOM
  3616.  
  3617. Since you are running AFS, I need to distinguish the directory in which
  3618. scripts reside from the directory in which they are installed (and from
  3619. which they are presumably copied to the former directory by occult means).
  3620.  
  3621. EOM
  3622.     case "$installscript" in
  3623.     '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
  3624.     *) dflt="$installscript";;
  3625.     esac
  3626.     fn=de~
  3627.     rp='Where will public scripts be installed?'
  3628.     . ./getfile
  3629.     installscript="$ans"
  3630. else
  3631.     installscript="$scriptdirexp"
  3632. fi
  3633.  
  3634. : determine perl absolute location
  3635. case "$perlpath" in
  3636. '')    perlpath=$binexp/perl ;;
  3637. esac
  3638.  
  3639. : figure out how to guarantee perl startup
  3640. case "$startperl" in
  3641. '')
  3642.     case "$sharpbang" in
  3643.     *!)
  3644.         $cat <<EOH
  3645.  
  3646. I can use the #! construct to start perl on your system. This will
  3647. make startup of perl scripts faster, but may cause problems if you
  3648. want to share those scripts and perl is not in a standard place
  3649. ($perlpath) on all your platforms. The alternative is to force
  3650. a shell by starting the script with a single ':' character.
  3651.  
  3652. EOH
  3653.         dflt=$perlpath
  3654.         rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
  3655.         . ./myread
  3656.         case "$ans" in
  3657.         none) startperl=": # use perl";;
  3658.         *) startperl="#!$ans";;
  3659.         esac
  3660.         ;;
  3661.     *) startperl=": # use perl"
  3662.         ;;
  3663.     esac
  3664.     ;;
  3665. esac
  3666. echo "I'll use $startperl to start perl scripts."
  3667.  
  3668. : see how we invoke the C preprocessor
  3669. echo " "
  3670. echo "Now, how can we feed standard input to your C preprocessor..." >&4
  3671. cat <<'EOT' >testcpp.c
  3672. #define ABC abc
  3673. #define XYZ xyz
  3674. ABC.XYZ
  3675. EOT
  3676. cd ..
  3677. echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
  3678. chmod 755 cppstdin
  3679. wrapper=`pwd`/cppstdin
  3680. ok='false'
  3681. cd UU
  3682.  
  3683. if $test "X$cppstdin" != "X" && \
  3684.     $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
  3685.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
  3686. then
  3687.     echo "You used to use $cppstdin $cppminus so we'll use that again."
  3688.     case "$cpprun" in
  3689.     '') echo "But let's see if we can live without a wrapper..." ;;
  3690.     *)
  3691.         if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
  3692.             $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
  3693.         then
  3694.             echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
  3695.             ok='true'
  3696.         else
  3697.             echo "(However, $cpprun $cpplast does not work, let's see...)"
  3698.         fi
  3699.         ;;
  3700.     esac
  3701. else
  3702.     case "$cppstdin" in
  3703.     '') ;;
  3704.     *)
  3705.         echo "Good old $cppstdin $cppminus does not seem to be of any help..."
  3706.         ;;
  3707.     esac
  3708. fi
  3709.  
  3710. if $ok; then
  3711.     : nothing
  3712. elif echo 'Maybe "'"$cc"' -E" will work...'; \
  3713.     $cc -E <testcpp.c >testcpp.out 2>&1; \
  3714.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3715.     echo "Yup, it does."
  3716.     x_cpp="$cc -E"
  3717.     x_minus='';
  3718. elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
  3719.     $cc -E - <testcpp.c >testcpp.out 2>&1; \
  3720.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3721.     echo "Yup, it does."
  3722.     x_cpp="$cc -E"
  3723.     x_minus='-';
  3724. elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
  3725.     $cc -P <testcpp.c >testcpp.out 2>&1; \
  3726.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3727.     echo "Yipee, that works!"
  3728.     x_cpp="$cc -P"
  3729.     x_minus='';
  3730. elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
  3731.     $cc -P - <testcpp.c >testcpp.out 2>&1; \
  3732.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3733.     echo "At long last!"
  3734.     x_cpp="$cc -P"
  3735.     x_minus='-';
  3736. elif echo 'No such luck, maybe "'$cpp'" will work...'; \
  3737.     $cpp <testcpp.c >testcpp.out 2>&1; \
  3738.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3739.     echo "It works!"
  3740.     x_cpp="$cpp"
  3741.     x_minus='';
  3742. elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
  3743.     $cpp - <testcpp.c >testcpp.out 2>&1; \
  3744.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3745.     echo "Hooray, it works!  I was beginning to wonder."
  3746.     x_cpp="$cpp"
  3747.     x_minus='-';
  3748. elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
  3749.     $wrapper <testcpp.c >testcpp.out 2>&1; \
  3750.     $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3751.     x_cpp="$wrapper"
  3752.     x_minus=''
  3753.     echo "Eureka!"
  3754. else
  3755.     dflt=''
  3756.     rp="No dice.  I can't find a C preprocessor.  Name one:"
  3757.     . ./myread
  3758.     x_cpp="$ans"
  3759.     x_minus=''
  3760.     $x_cpp <testcpp.c >testcpp.out 2>&1
  3761.     if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
  3762.         echo "OK, that will do." >&4
  3763.     else
  3764. echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
  3765.         exit 1
  3766.     fi
  3767. fi
  3768.  
  3769. case "$ok" in
  3770. false)
  3771.     cppstdin="$x_cpp"
  3772.     cppminus="$x_minus"
  3773.     cpprun="$x_cpp"
  3774.     cpplast="$x_minus"
  3775.     set X $x_cpp
  3776.     shift
  3777.     case "$1" in
  3778.     "$cpp")
  3779.         echo "Perhaps can we force $cc -E using a wrapper..."
  3780.         if $wrapper <testcpp.c >testcpp.out 2>&1; \
  3781.             $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
  3782.         then
  3783.             echo "Yup, we can."
  3784.             cppstdin="$wrapper"
  3785.             cppminus='';
  3786.         else
  3787.             echo "Nope, we'll have to live without it..."
  3788.         fi
  3789.         ;;
  3790.     esac
  3791.     case "$cpprun" in
  3792.     "$wrapper")
  3793.         cpprun=''
  3794.         cpplast=''
  3795.         ;;
  3796.     esac
  3797.     ;;
  3798. esac
  3799.  
  3800. case "$cppstdin" in
  3801. "$wrapper") ;;
  3802. *) $rm -f $wrapper;;
  3803. esac
  3804. $rm -f testcpp.c testcpp.out
  3805.  
  3806. : Set private lib path
  3807. case "$plibpth" in
  3808. '') if ./mips; then
  3809.         plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
  3810.     fi;;
  3811. esac
  3812. case "$libpth" in
  3813. ' ') dlist='';;
  3814. '') dlist="$loclibpth $plibpth $glibpth";;
  3815. *) dlist="$libpth";;
  3816. esac
  3817.  
  3818. : Now check and see which directories actually exist, avoiding duplicates
  3819. libpth=''
  3820. for xxx in $dlist
  3821. do
  3822.     if $test -d $xxx; then
  3823.         case " $libpth " in
  3824.         *" $xxx "*) ;;
  3825.         *) libpth="$libpth $xxx";;
  3826.         esac
  3827.     fi
  3828. done
  3829. $cat <<'EOM'
  3830.  
  3831. Some systems have incompatible or broken versions of libraries.  Among
  3832. the directories listed in the question below, please remove any you
  3833. know not to be holding relevant libraries, and add any that are needed.
  3834. Say "none" for none.
  3835.  
  3836. EOM
  3837. case "$libpth" in
  3838. '') dflt='none';;
  3839. *)
  3840.     set X $libpth
  3841.     shift
  3842.     dflt=${1+"$@"}
  3843.     ;;
  3844. esac
  3845. rp="Directories to use for library searches?"
  3846. . ./myread
  3847. case "$ans" in
  3848. none) libpth=' ';;
  3849. *) libpth="$ans";;
  3850. esac
  3851.  
  3852. : determine optimize, if desired, or use for debug flag also
  3853. case "$optimize" in
  3854. ' ') dflt='none';;
  3855. '') dflt='-O';;
  3856. *) dflt="$optimize";;
  3857. esac
  3858. $cat <<EOH
  3859.  
  3860. Some C compilers have problems with their optimizers, by default, $package
  3861. compiles with the -O flag to use the optimizer.  Alternately, you might want
  3862. to use the symbolic debugger, which uses the -g flag (on traditional Unix
  3863. systems).  Either flag can be specified here.  To use neither flag, specify
  3864. the word "none".
  3865.  
  3866. EOH
  3867. rp="What optimizer/debugger flag should be used?"
  3868. . ./myread
  3869. optimize="$ans"
  3870. case "$optimize" in
  3871. 'none') optimize=" ";;
  3872. esac
  3873.  
  3874. dflt=''
  3875. : We will not override a previous value, but we might want to
  3876. : augment a hint file
  3877. case "$hint" in
  3878. none|recommended)
  3879.     case "$gccversion" in
  3880.     1*) dflt='-fpcc-struct-return' ;;
  3881.     esac
  3882.     case "$optimize" in
  3883.     *-g*) dflt="$dflt -DDEBUGGING";;
  3884.     esac
  3885.     case "$gccversion" in
  3886.     2*) if test -d /etc/conf/kconfig.d &&
  3887.             $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
  3888.         then
  3889.             dflt="$dflt -posix"
  3890.         fi
  3891.         ;;
  3892.     esac
  3893.     ;;
  3894. esac
  3895.  
  3896. case "$mips_type" in
  3897. *BSD*|'') inclwanted="$locincpth $usrinc";;
  3898. *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
  3899. esac
  3900. for thisincl in $inclwanted; do
  3901.     if $test -d $thisincl; then
  3902.         if $test x$thisincl != x$usrinc; then
  3903.             case "$dflt" in
  3904.             *$thisincl*);;
  3905.             *) dflt="$dflt -I$thisincl";;
  3906.             esac
  3907.         fi
  3908.     fi
  3909. done
  3910.  
  3911. inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
  3912.     xxx=true;
  3913. elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
  3914.     xxx=true;
  3915. else
  3916.     xxx=false;
  3917. fi;
  3918. if $xxx; then
  3919.     case "$dflt" in
  3920.     *$2*);;
  3921.     *) dflt="$dflt -D$2";;
  3922.     esac;
  3923. fi'
  3924.  
  3925. if ./osf1; then
  3926.     set signal.h __LANGUAGE_C__; eval $inctest
  3927. else
  3928.     set signal.h LANGUAGE_C; eval $inctest
  3929. fi
  3930. set signal.h NO_PROTOTYPE; eval $inctest
  3931. set signal.h _NO_PROTO; eval $inctest
  3932.  
  3933. case "$hint" in
  3934. none|recommended) dflt="$ccflags $dflt" ;;
  3935. *) dflt="$ccflags";;
  3936. esac
  3937.  
  3938. case "$dflt" in
  3939. ''|' ') dflt=none;;
  3940. esac
  3941. $cat <<EOH
  3942.  
  3943. Your C compiler may want other flags.  For this question you should include
  3944. -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
  3945. but you should NOT include libraries or ld flags like -lwhatever.  If you
  3946. want $package to honor its debug switch, you should include -DDEBUGGING here.
  3947. Your C compiler might also need additional flags, such as -D_POSIX_SOURCE,
  3948. -DHIDEMYMALLOC or -DCRIPPLED_CC.
  3949.  
  3950. To use no flags, specify the word "none".
  3951.  
  3952. EOH
  3953. set X $dflt
  3954. shift
  3955. dflt=${1+"$@"}
  3956. rp="Any additional cc flags?"
  3957. . ./myread
  3958. case "$ans" in
  3959. none) ccflags='';;
  3960. *) ccflags="$ans";;
  3961. esac
  3962.  
  3963. : the following weeds options from ccflags that are of no interest to cpp
  3964. cppflags="$ccflags"
  3965. case "$gccversion" in
  3966. 1*) cppflags="$cppflags -D__GNUC__"
  3967. esac
  3968. case "$mips_type" in
  3969. '');;
  3970. *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
  3971. esac
  3972. case "$cppflags" in
  3973. '');;
  3974. *)
  3975.     echo " "
  3976.     echo "Let me guess what the preprocessor flags are..." >&4
  3977.     set X $cppflags
  3978.     shift
  3979.     cppflags=''
  3980.     $cat >cpp.c <<'EOM'
  3981. #define BLURFL foo
  3982.  
  3983. BLURFL xx LFRULB
  3984. EOM
  3985.     previous=''
  3986.     for flag in $*
  3987.     do
  3988.         case "$flag" in
  3989.         -*) ftry="$flag";;
  3990.         *) ftry="$previous $flag";;
  3991.         esac
  3992.         if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
  3993.             >cpp1.out 2>/dev/null && \
  3994.             $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
  3995.             >cpp2.out 2>/dev/null && \
  3996.             $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
  3997.             $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
  3998.         then
  3999.             cppflags="$cppflags $ftry"
  4000.             previous=''
  4001.         else
  4002.             previous="$flag"
  4003.         fi
  4004.     done
  4005.     set X $cppflags
  4006.     shift
  4007.     cppflags=${1+"$@"}
  4008.     case "$cppflags" in
  4009.     *-*)  echo "They appear to be: $cppflags";;
  4010.     esac
  4011.     $rm -f cpp.c cpp?.out
  4012.     ;;
  4013. esac
  4014.  
  4015. : flags used in final linking phase
  4016.  
  4017. case "$ldflags" in
  4018. '') if ./venix; then
  4019.         dflt='-i -z'
  4020.     else
  4021.         dflt=''
  4022.     fi
  4023.     case "$ccflags" in
  4024.     *-posix*) dflt="$dflt -posix" ;;
  4025.     esac
  4026.     ;;
  4027. *) dflt="$ldflags";;
  4028. esac
  4029.  
  4030. : Try to guess additional flags to pick up local libraries.
  4031. for thislibdir in $libpth; do
  4032.     case " $loclibpth " in
  4033.     *" $thislibdir "*)
  4034.         case "$dflt " in 
  4035.         *"-L$thislibdir "*) ;;
  4036.         *)  dflt="$dflt -L$thislibdir" ;;
  4037.         esac
  4038.         ;;
  4039.     esac
  4040. done
  4041.  
  4042. case "$dflt" in
  4043. '') dflt='none' ;;
  4044. esac
  4045.  
  4046. $cat <<EOH
  4047.  
  4048. Your C linker may need flags.  For this question you should
  4049. include -L/whatever and any other flags used by the C linker, but you
  4050. should NOT include libraries like -lwhatever.
  4051.  
  4052. Make sure you include the appropriate -L/path flags if your C linker
  4053. does not normally search all of the directories you specified above,
  4054. namely
  4055.     $libpth
  4056. To use no flags, specify the word "none".
  4057.  
  4058. EOH
  4059.  
  4060. rp="Any additional ld flags (NOT including libraries)?"
  4061. . ./myread
  4062. case "$ans" in
  4063. none) ldflags='';;
  4064. *) ldflags="$ans";;
  4065. esac
  4066. rmlist="$rmlist pdp11"
  4067.  
  4068. : coherency check
  4069. echo " "
  4070. echo "Checking your choice of C compiler and flags for coherency..." >&4
  4071. set X $cc $optimize $ccflags $ldflags try.c -o try
  4072. shift
  4073. $cat >try.msg <<EOM
  4074. I've tried to compile and run a simple program with:
  4075.  
  4076.     $*
  4077.     ./try
  4078.  
  4079. and I got the following output:
  4080.  
  4081. EOM
  4082. $cat > try.c <<'EOF'
  4083. #include <stdio.h>
  4084. main() { exit(0); }
  4085. EOF
  4086. dflt=y
  4087. if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then
  4088.     if sh -c './try' >>try.msg 2>&1; then
  4089.         dflt=n
  4090.     else
  4091.         echo "The program compiled OK, but exited with status $?." >>try.msg
  4092.         rp="You have a problem.  Shall I abort Configure"
  4093.         dflt=y
  4094.     fi
  4095. else
  4096.     echo "I can't compile the test program." >>try.msg
  4097.     rp="You have a BIG problem.  Shall I abort Configure"
  4098.     dflt=y
  4099. fi
  4100. case "$dflt" in
  4101. y)
  4102.     $cat try.msg
  4103.     case "$knowitall" in
  4104.     '')
  4105.         echo "(The supplied flags might be incorrect with this C compiler.)"
  4106.         ;;
  4107.     *) dflt=n;;
  4108.     esac
  4109.     echo " "
  4110.     . ./myread
  4111.     case "$ans" in
  4112.     n*|N*) ;;
  4113.     *)    echo "Ok.  Stopping Configure." >&4
  4114.         exit 1
  4115.         ;;
  4116.     esac
  4117.     ;;
  4118. n) echo "OK, that should do.";;
  4119. esac
  4120. $rm -f try try.* core
  4121.  
  4122. : compute shared library extension
  4123. case "$so" in
  4124. '')
  4125.     if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
  4126.         dflt='sl'
  4127.     else
  4128.         dflt='so'
  4129.     fi
  4130.     ;;
  4131. *) dflt="$so";;
  4132. esac
  4133. $cat <<EOM
  4134.  
  4135. On some systems, shared libraries may be available.  Answer 'none' if
  4136. you want to suppress searching of shared libraries for the remaining
  4137. of this configuration.
  4138.  
  4139. EOM
  4140. rp='What is the file extension used for shared libraries?'
  4141. . ./myread
  4142. so="$ans"
  4143.  
  4144. : Looking for optional libraries
  4145. echo " "
  4146. echo "Checking for optional libraries..." >&4
  4147. case "$libs" in
  4148. ' '|'') dflt='';;
  4149. *) dflt="$libs";;
  4150. esac
  4151. case "$libswanted" in
  4152. '') libswanted='c_s';;
  4153. esac
  4154. for thislib in $libswanted; do
  4155.     
  4156.     if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
  4157.         echo "Found -l$thislib (shared)."
  4158.         case " $dflt " in
  4159.         *"-l$thislib "*);;
  4160.         *) dflt="$dflt -l$thislib";;
  4161.         esac
  4162.     elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
  4163.         echo "Found -l$thislib (shared)."
  4164.         case " $dflt " in
  4165.         *"-l$thislib "*);;
  4166.         *) dflt="$dflt -l$thislib";;
  4167.         esac
  4168.     elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then
  4169.         echo "Found -l$thislib."
  4170.         case " $dflt " in
  4171.         *"-l$thislib "*);;
  4172.         *) dflt="$dflt -l$thislib";;
  4173.         esac
  4174.     elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then
  4175.         echo "Found -l$thislib."
  4176.         case " $dflt " in
  4177.         *"-l$thislib "*);;
  4178.         *) dflt="$dflt -l$thislib";;
  4179.         esac
  4180.     elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then
  4181.         echo "Found -l${thislib}_s."
  4182.         case " $dflt " in
  4183.         *"-l$thislib "*);;
  4184.         *) dflt="$dflt -l${thislib}_s";;
  4185.         esac
  4186.     elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then
  4187.         echo "Found -l$thislib."
  4188.         case " $dflt " in
  4189.         *"-l$thislib "*);;
  4190.         *) dflt="$dflt -l$thislib";;
  4191.         esac
  4192.     else
  4193.         echo "No -l$thislib."
  4194.     fi
  4195. done
  4196. set X $dflt
  4197. shift
  4198. dflt="$*"
  4199. case "$libs" in
  4200. '') dflt="$dflt";;
  4201. *) dflt="$libs";;
  4202. esac
  4203. case "$dflt" in
  4204. ' '|'') dflt='none';;
  4205. esac
  4206.  
  4207. $cat <<EOM
  4208.  
  4209. Some versions of Unix support shared libraries, which make executables smaller
  4210. but make load time slightly longer.
  4211.  
  4212. On some systems, mostly newer Unix System V's, the shared library is included
  4213. by putting the option "-lc_s" as the last thing on the cc command line when
  4214. linking.  Other systems use shared libraries by default.  There may be other
  4215. libraries needed to compile $package on your machine as well.  If your system
  4216. needs the "-lc_s" option, include it here.  Include any other special libraries
  4217. here as well.  Say "none" for none.
  4218. EOM
  4219.  
  4220. echo " "
  4221. rp="Any additional libraries?"
  4222. . ./myread
  4223. case "$ans" in
  4224. none) libs=' ';;
  4225. *) libs="$ans";;
  4226. esac
  4227.  
  4228. : see if nm is to be used to determine whether a symbol is defined or not
  4229. case "$usenm" in
  4230. '')
  4231.     dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null`
  4232.     if $test $dflt -gt 20; then
  4233.         dflt=y
  4234.     else
  4235.         dflt=n
  4236.     fi
  4237.     ;;
  4238. *)
  4239.     case "$usenm" in
  4240.     true) dflt=y;;
  4241.     *) dflt=n;;
  4242.     esac
  4243.     ;;
  4244. esac
  4245. $cat <<EOM
  4246.  
  4247. I can use 'nm' to extract the symbols from your C libraries. This is a time
  4248. consuming task which may generate huge output on the disk (up to 3 megabytes)
  4249. but that should make the symbols extraction faster. The alternative is to skip
  4250. the 'nm' extraction part and to compile a small test program instead to
  4251. determine whether each symbol is present. If you have a fast C compiler and/or
  4252. if your 'nm' output cannot be parsed, this may be the best solution.
  4253.  
  4254. EOM
  4255. rp='Shall I use nm to extract C symbols from the libraries?'
  4256. . ./myread
  4257. case "$ans" in
  4258. n|N) usenm=false;;
  4259. *) usenm=true;;
  4260. esac
  4261.  
  4262. runnm=$usenm
  4263. case "$reuseval" in
  4264. true) runnm=false;;
  4265. esac
  4266.  
  4267. : nm options which may be necessary
  4268. case "$nm_opt" in
  4269. '') if $test -f /mach_boot; then
  4270.         nm_opt=''
  4271.     elif $test -d /usr/ccs/lib; then
  4272.         nm_opt='-p'
  4273.     elif $test -f /dgux; then
  4274.         nm_opt='-p'
  4275.     else
  4276.         nm_opt=''
  4277.     fi;;
  4278. esac
  4279.  
  4280. : nm options which may be necessary for shared libraries but illegal
  4281. : for archive libraries.  Thank you, Linux.
  4282. case "$nm_so_opt" in
  4283. '')    case "$myuname" in
  4284.     *linux*)
  4285.         if nm --help | $grep 'dynamic' > /dev/null 2>&1; then
  4286.             nm_so_opt='--dynamic'
  4287.         fi
  4288.         ;;
  4289.     esac
  4290.     ;;
  4291. esac
  4292.  
  4293. case "$runnm" in
  4294. true)
  4295. : get list of predefined functions in a handy place
  4296. echo " "
  4297. case "$libc" in
  4298. '') libc=unknown
  4299.     case "$libs" in
  4300.     *-lc_s*) libc=`./loc libc_s.a $libc $libpth`
  4301.     esac
  4302.     ;;
  4303. esac
  4304. libnames='';
  4305. case "$libs" in
  4306. '') ;;
  4307. *)  for thislib in $libs; do
  4308.     case "$thislib" in
  4309.     -lc|-lc_s)
  4310.         : Handle C library specially below.
  4311.         ;;
  4312.     -l*)
  4313.         thislib=`echo $thislib | $sed -e 's/^-l//'`
  4314.         if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
  4315.             :
  4316.         elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
  4317.             :
  4318.         elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then
  4319.             :
  4320.         elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
  4321.             :
  4322.         elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
  4323.             :
  4324.         elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then
  4325.             :
  4326.         else
  4327.             try=''
  4328.         fi
  4329.         libnames="$libnames $try"
  4330.         ;;
  4331.     *) libnames="$libnames $thislib" ;;
  4332.     esac
  4333.     done
  4334.     ;;
  4335. esac
  4336. xxx=normal
  4337. case "$libc" in
  4338. unknown)
  4339.     set /lib/libc.$so
  4340.     for xxx in $libpth; do
  4341.         $test -r $1 || set $xxx/libc.$so
  4342.         : The messy sed command sorts on library version numbers.
  4343.         $test -r $1 || \
  4344.             set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
  4345.                 tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e '
  4346.                 h
  4347.                 s/[0-9][0-9]*/0000&/g
  4348.                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
  4349.                 G
  4350.                 s/\n/ /' | \
  4351.              sort | $sed -e 's/^.* //'`
  4352.         eval set \$$#
  4353.     done
  4354.     $test -r $1 || set /usr/ccs/lib/libc.$so
  4355.       $test -r $1 || set /lib/libsys_s.a
  4356.       ;;
  4357. *)
  4358.     set blurfl
  4359.     ;;
  4360. esac
  4361. if $test -r "$1"; then
  4362.     echo "Your (shared) C library seems to be in $1."
  4363.     libc="$1"
  4364. elif $test -r /lib/libc && $test -r /lib/clib; then
  4365.     echo "Your C library seems to be in both /lib/clib and /lib/libc."
  4366.     xxx=apollo
  4367.     libc='/lib/clib /lib/libc'
  4368.     if $test -r /lib/syslib; then
  4369.         echo "(Your math library is in /lib/syslib.)"
  4370.         libc="$libc /lib/syslib"
  4371.     fi
  4372. elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
  4373.     echo "Your C library seems to be in $libc, as you said before."
  4374. elif $test -r $incpath/usr/lib/libc.a; then
  4375.     libc=$incpath/usr/lib/libc.a;
  4376.     echo "Your C library seems to be in $libc.  That's fine."
  4377. elif $test -r /lib/libc.a; then
  4378.     libc=/lib/libc.a;
  4379.     echo "Your C library seems to be in $libc.  You're normal."
  4380. else
  4381.     if tans=`./loc libc.a blurfl/dyick $libpth`; $test -r "$tans"; then
  4382.         :
  4383.     elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
  4384.         libnames="$libnames "`./loc clib blurfl/dyick $libpth`
  4385.     elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
  4386.         :
  4387.     elif tans=`./loc Slibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
  4388.         :
  4389.     elif tans=`./loc Mlibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then
  4390.         :
  4391.     else
  4392.         tans=`./loc Llibc.a blurfl/dyick $xlibpth`
  4393.     fi
  4394.     if $test -r "$tans"; then
  4395.         echo "Your C library seems to be in $tans, of all places."
  4396.         libc=$tans
  4397.     else
  4398.         libc='blurfl'
  4399.     fi
  4400. fi
  4401. if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
  4402.     dflt="$libc"
  4403.     cat <<EOM
  4404.  
  4405. If the guess above is wrong (which it might be if you're using a strange
  4406. compiler, or your machine supports multiple models), you can override it here.
  4407.  
  4408. EOM
  4409. else
  4410.     dflt=''
  4411.     echo $libpth | tr ' ' '\012' | sort | uniq > libpath
  4412.     cat >&4 <<EOM
  4413. I can't seem to find your C library.  I've looked in the following places:
  4414.  
  4415. EOM
  4416.     $sed 's/^/    /' libpath
  4417.     cat <<EOM
  4418.  
  4419. None of these seems to contain your C library. I need to get its name...
  4420.  
  4421. EOM
  4422. fi
  4423. fn=f
  4424. rp='Where is your C library?'
  4425. . ./getfile
  4426. libc="$ans"
  4427.  
  4428. echo " "
  4429. echo $libc $libnames | tr ' ' '\012' | sort | uniq > libnames
  4430. set X `cat libnames`
  4431. shift
  4432. xxx=files
  4433. case $# in 1) xxx=file; esac
  4434. echo "Extracting names from the following $xxx for later perusal:" >&4
  4435. echo " "
  4436. $sed 's/^/    /' libnames >&4
  4437. echo " "
  4438. $echo $n "This may take a while...$c" >&4
  4439.  
  4440. : Linux may need the special Dynamic option to nm for shared libraries.
  4441. : In general, this is stored in the nm_so_opt variable.
  4442. : Unfortunately, that option may be fatal on non-shared libraries.
  4443. for nm_libs_ext in $*; do
  4444.     case $nm_libs_ext in
  4445.     *$so*)    nm $nm_so_opt $nm_opt $nm_libs_ext 2>/dev/null ;;
  4446.     *)        nm $nm_opt $nm_libs_ext 2>/dev/null ;;
  4447.     esac
  4448. done > libc.tmp
  4449.  
  4450. $echo $n ".$c"
  4451. $grep fprintf libc.tmp > libc.ptf
  4452. xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
  4453. xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
  4454. xxx='[ADTSIW]'
  4455. if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx //p'";\
  4456.     eval $xscan;\
  4457.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4458.         eval $xrun
  4459. elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
  4460.     eval $xscan;\
  4461.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4462.         eval $xrun
  4463. elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
  4464.     eval $xscan;\
  4465.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4466.         eval $xrun
  4467. elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
  4468.     eval $xscan;\
  4469.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4470.         eval $xrun
  4471. elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
  4472.     eval $xscan;\
  4473.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4474.         eval $xrun
  4475. elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
  4476.     eval $xscan;\
  4477.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4478.         eval $xrun
  4479. elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
  4480.                 -e '/ file/d' -e 's/^\([^     ]*\).*/\1/p'";\
  4481.     eval $xscan;\
  4482.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4483.         eval $xrun
  4484. elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
  4485.     eval $xscan;\
  4486.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4487.         eval $xrun
  4488. elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
  4489.     eval $xscan;\
  4490.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4491.         eval $xrun
  4492. elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
  4493.     eval $xscan;\
  4494.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4495.         eval $xrun
  4496. elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
  4497.     eval $xscan;\
  4498.     $contains '^fprintf$' libc.list >/dev/null 2>&1; then
  4499.         eval $xrun
  4500. else
  4501.     nm -p $* 2>/dev/null >libc.tmp
  4502.     $grep fprintf libc.tmp > libc.ptf
  4503.     if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
  4504.         eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
  4505.     then
  4506.         nm_opt='-p'
  4507.         eval $xrun
  4508.     else
  4509.         echo " "
  4510.         echo "nm didn't seem to work right. Trying ar instead..." >&4
  4511.         com=''
  4512.         if ar t $libc > libc.tmp; then
  4513.             for thisname in $libnames; do
  4514.                 ar t $thisname >>libc.tmp
  4515.             done
  4516.             $sed -e 's/\.o$//' < libc.tmp > libc.list
  4517.             echo "Ok." >&4
  4518.         else
  4519.             echo "ar didn't seem to work right." >&4
  4520.             echo "Maybe this is a Cray...trying bld instead..." >&4
  4521.             if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list
  4522.             then
  4523.                 for thisname in $libnames; do
  4524.                     bld t $libnames | \
  4525.                     $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list
  4526.                     ar t $thisname >>libc.tmp
  4527.                 done
  4528.                 echo "Ok." >&4
  4529.             else
  4530.                 echo "That didn't work either.  Giving up." >&4
  4531.                 exit 1
  4532.             fi
  4533.         fi
  4534.     fi
  4535. fi
  4536. nm_extract="$com"
  4537. if $test -f /lib/syscalls.exp; then
  4538.     echo " "
  4539.     echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
  4540.     $sed -n 's/^\([^     ]*\)[     ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
  4541. fi
  4542. ;;
  4543. esac
  4544. $rm -f libnames libpath
  4545.  
  4546. : is a C symbol defined?
  4547. csym='tlook=$1;
  4548. case "$3" in
  4549. -v) tf=libc.tmp; tc=""; tdc="";;
  4550. -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
  4551. *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
  4552. esac;
  4553. tx=yes;
  4554. case "$reuseval-$4" in
  4555. true-) ;;
  4556. true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
  4557. esac;
  4558. case "$tx" in
  4559. yes)
  4560.     case "$runnm" in
  4561.     true)
  4562.         if $contains $tlook $tf >/dev/null 2>&1;
  4563.         then tval=true;
  4564.         else tval=false;
  4565.         fi;;
  4566.     *)
  4567.         echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
  4568.         if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
  4569.         then tval=true;
  4570.         else tval=false;
  4571.         fi;
  4572.         $rm -f t t.c;;
  4573.     esac;;
  4574. *)
  4575.     case "$tval" in
  4576.     $define) tval=true;;
  4577.     *) tval=false;;
  4578.     esac;;
  4579. esac;
  4580. eval "$2=$tval"'
  4581.  
  4582. : define an is-in-libc? function
  4583. inlibc='echo " "; td=$define; tu=$undef;
  4584. sym=$1; var=$2; eval "was=\$$2";
  4585. tx=yes;
  4586. case "$reuseval$was" in
  4587. true) ;;
  4588. true*) tx=no;;
  4589. esac;
  4590. case "$tx" in
  4591. yes)
  4592.     set $sym tres -f;
  4593.     eval $csym;
  4594.     case "$tres" in
  4595.     true)
  4596.         echo "$sym() found." >&4;
  4597.         case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
  4598.     *)
  4599.         echo "$sym() NOT found." >&4;
  4600.         case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
  4601.     esac;;
  4602. *)
  4603.     case "$was" in
  4604.     $define) echo "$sym() found." >&4;;
  4605.     *) echo "$sym() NOT found." >&4;;
  4606.     esac;;
  4607. esac'
  4608.  
  4609. : Check how to convert floats to strings.
  4610. echo " "
  4611. echo "Checking for an efficient way to convert floats to strings."
  4612. $cat >try.c <<'EOP'
  4613. #ifdef TRY_gconvert
  4614. #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
  4615. #endif
  4616. #ifdef TRY_gcvt
  4617. #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
  4618. #endif
  4619. #ifdef TRY_sprintf
  4620. #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
  4621. #endif
  4622. main() { 
  4623.     char buf[64]; 
  4624.     Gconvert(1.0, 8, 0, buf); 
  4625.     if (buf[0] != '1' || buf[1] != '\0')
  4626.         exit(1);
  4627.     Gconvert(0.0, 8, 0, buf); 
  4628.     if (buf[0] != '0' || buf[1] != '\0')
  4629.         exit(1);
  4630.     Gconvert(-1.0, 8, 0, buf); 
  4631.     if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0')
  4632.         exit(1);
  4633.     exit(0);
  4634. }
  4635. EOP
  4636. case "$d_Gconvert" in
  4637. gconvert*) xxx_list='gconvert gcvt sprintf' ;;
  4638. gcvt*) xxx_list='gcvt gconvert sprintf' ;;
  4639. sprintf*) xxx_list='sprintf gconvert gcvt' ;;
  4640. *) xxx_list='gconvert gcvt sprintf' ;;
  4641. esac
  4642.  
  4643. for xxx_convert in $xxx_list; do
  4644.     echo "Trying $xxx_convert"
  4645.     $rm -f try try.o
  4646.     if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
  4647.         try.c $libs > /dev/null 2>&1 ; then
  4648.         echo "$xxx_convert" found. >&4
  4649.         if ./try; then
  4650.             echo "Good, $xxx_convert drops a trailing decimal point."
  4651.             echo "I'll use $xxx_convert to convert floats into a string." >&4
  4652.             break;
  4653.         else
  4654.             echo "But $xxx_convert keeps a trailing decimal point".
  4655.         fi
  4656.     else
  4657.         echo "$xxx_convert NOT found." >&4
  4658.     fi
  4659. done
  4660.         
  4661. case "$xxx_convert" in
  4662. gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
  4663. gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
  4664. *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
  4665. esac
  4666.  
  4667. : Initialize h_fcntl
  4668. h_fcntl=false
  4669.  
  4670. : Initialize h_sysfile
  4671. h_sysfile=false
  4672.  
  4673. : determine filename position in cpp output
  4674. echo " "
  4675. echo "Computing filename position in cpp output for #include directives..." >&4
  4676. echo '#include <stdio.h>' > foo.c
  4677. $cat >fieldn <<EOF
  4678. $startsh
  4679. $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
  4680. $grep '^[     ]*#.*stdio\.h' | \
  4681. while read cline; do
  4682.     pos=1
  4683.     set \$cline
  4684.     while $test \$# -gt 0; do
  4685.         if $test -r \`echo \$1 | $tr -d '"'\`; then
  4686.             echo "\$pos"
  4687.             exit 0
  4688.         fi
  4689.         shift
  4690.         pos=\`expr \$pos + 1\`
  4691.     done
  4692. done
  4693. EOF
  4694. chmod +x fieldn
  4695. fieldn=`./fieldn`
  4696. $rm -f foo.c fieldn
  4697. case $fieldn in
  4698. '') pos='???';;
  4699. 1) pos=first;;
  4700. 2) pos=second;;
  4701. 3) pos=third;;
  4702. *) pos="${fieldn}th";;
  4703. esac
  4704. echo "Your cpp writes the filename in the $pos field of the line."
  4705.  
  4706. : locate header file
  4707. $cat >findhdr <<EOF
  4708. $startsh
  4709. wanted=\$1
  4710. name=''
  4711. if test -f $usrinc/\$wanted; then
  4712.     echo "$usrinc/\$wanted"
  4713.     exit 0
  4714. fi
  4715. awkprg='{ print \$$fieldn }'
  4716. echo "#include <\$wanted>" > foo\$\$.c
  4717. $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
  4718. $grep "^[     ]*#.*\$wanted" | \
  4719. while read cline; do
  4720.     name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
  4721.     case "\$name" in
  4722.     */\$wanted) echo "\$name"; exit 0;;
  4723.     *) name='';;
  4724.     esac;
  4725. done;
  4726. $rm -f foo\$\$.c;
  4727. case "\$name" in
  4728. '') exit 1;;
  4729. esac
  4730. EOF
  4731. chmod +x findhdr
  4732.  
  4733. : access call always available on UNIX
  4734. set access d_access
  4735. eval $inlibc
  4736.  
  4737. : locate the flags for 'access()'
  4738. case "$d_access" in
  4739. "$define")
  4740.     echo " "
  4741.     $cat >access.c <<'EOCP'
  4742. #include <sys/types.h>
  4743. #ifdef I_FCNTL
  4744. #include <fcntl.h>
  4745. #endif
  4746. #ifdef I_SYS_FILE
  4747. #include <sys/file.h>
  4748. #endif
  4749. #ifdef I_UNISTD
  4750. #include <unistd.h>
  4751. #endif
  4752. main() {
  4753.     exit(R_OK);
  4754. }
  4755. EOCP
  4756.     : check sys/file.h first, no particular reason here
  4757.     if $test `./findhdr sys/file.h` && \
  4758.         $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then
  4759.         h_sysfile=true;
  4760.         echo "<sys/file.h> defines the *_OK access constants." >&4
  4761.     elif $test `./findhdr fcntl.h` && \
  4762.         $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then
  4763.         h_fcntl=true;
  4764.         echo "<fcntl.h> defines the *_OK access constants." >&4
  4765.     elif $test `./findhdr unistd.h` && \
  4766.         $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then
  4767.         echo "<unistd.h> defines the *_OK access constants." >&4
  4768.     else
  4769.         echo "I can't find the four *_OK access constants--I'll use mine." >&4
  4770.     fi
  4771.     ;;
  4772. esac
  4773. $rm -f access*
  4774.  
  4775. : see if alarm exists
  4776. set alarm d_alarm
  4777. eval $inlibc
  4778.  
  4779. : Look for GNU-cc style attribute checking
  4780. echo " "
  4781. echo "Checking whether your compiler can handle __attribute__ ..." >&4
  4782. $cat >attrib.c <<'EOCP'
  4783. #include <stdio.h>
  4784. void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
  4785. EOCP
  4786. if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
  4787.     if $contains 'warning' attrib.out >/dev/null 2>&1; then
  4788.         echo "Your C compiler doesn't fully support __attribute__."
  4789.         val="$undef"
  4790.     else
  4791.         echo "Your C compiler supports __attribute__."
  4792.         val="$define"
  4793.     fi
  4794. else
  4795.     echo "Your C compiler doesn't seem to understand __attribute__ at all."
  4796.     val="$undef"
  4797. fi
  4798. set d_attribut
  4799. eval $setvar
  4800. $rm -f attrib*
  4801.  
  4802. : see if bcmp exists
  4803. set bcmp d_bcmp
  4804. eval $inlibc
  4805.  
  4806. : see if bcopy exists
  4807. set bcopy d_bcopy
  4808. eval $inlibc
  4809.  
  4810. : see if setpgrp exists
  4811. set setpgrp d_setpgrp
  4812. eval $inlibc
  4813.  
  4814. : see which flavor of setpgrp is in use
  4815. case "$d_setpgrp" in
  4816. "$define")
  4817.     echo " "
  4818.     $cat >set.c <<EOP
  4819. main()
  4820. {
  4821.     if (getuid() == 0) {
  4822.         printf("(I see you are running Configure as super-user...)\n");
  4823.         setuid(1);
  4824.     }
  4825.     if (-1 == setpgrp(1, 1))
  4826.         exit(1);
  4827.     exit(0);
  4828. }
  4829. EOP
  4830.     if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
  4831.         ./set 2>/dev/null
  4832.         case $? in
  4833.         0) echo "You have to use setpgrp() instead of setpgrp(pid, pgrp)." >&4
  4834.             val="$undef";;
  4835.         *) echo "You have to use setpgrp(pid, pgrp) instead of setpgrp()." >&4
  4836.             val="$define";;
  4837.         esac
  4838.     else
  4839.         if ./usg; then
  4840.             xxx="USG one, i.e. you use setpgrp()."
  4841.             val="$undef"
  4842.         else
  4843.             xxx="BSD one, i.e. you use setpgrp(pid, pgrp)."
  4844.             val="$define"
  4845.         fi
  4846.         echo "Assuming your setpgrp is a $xxx" >&4
  4847.     fi
  4848.     ;;
  4849. *) val="$undef";;
  4850. esac
  4851. set d_bsdpgrp
  4852. eval $setvar
  4853. $rm -f set set.c
  4854.  
  4855. : see if bzero exists
  4856. set bzero d_bzero
  4857. eval $inlibc
  4858.  
  4859. : check for length of integer
  4860. echo " "
  4861. case "$intsize" in
  4862. '')
  4863.     echo "Checking to see how big your integers are..." >&4
  4864.     $cat >try.c <<'EOCP'
  4865. #include <stdio.h>
  4866. main()
  4867. {
  4868.     printf("%d\n", sizeof(int));
  4869.     exit(0);
  4870. }
  4871. EOCP
  4872.     if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
  4873.         intsize=`./try`
  4874.         echo "Your integers are $intsize bytes long."
  4875.     else
  4876.         dflt='4'
  4877.         echo "(I can't seem to compile the test program.  Guessing...)"
  4878.         rp="What is the size of an integer (in bytes)?"
  4879.         . ./myread
  4880.         intsize="$ans"
  4881.     fi
  4882.     ;;
  4883. esac
  4884. $rm -f try.c try
  4885.  
  4886. : see if signal is declared as pointer to function returning int or void
  4887. echo " "
  4888. xxx=`./findhdr signal.h`
  4889. $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
  4890. if $contains 'int.*\*[     ]*signal' $$.tmp >/dev/null 2>&1 ; then
  4891.     echo "You have int (*signal())() instead of void." >&4
  4892.     val="$undef"
  4893. elif $contains 'void.*\*[     ]*signal' $$.tmp >/dev/null 2>&1 ; then
  4894.     echo "You have void (*signal())() instead of int." >&4
  4895.     val="$define"
  4896. elif $contains 'extern[     ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
  4897.     echo "You have int (*signal())() instead of void." >&4
  4898.     val="$undef"
  4899. else
  4900.     case "$d_voidsig" in
  4901.     '')
  4902.     echo "I can't determine whether signal handler returns void or int..." >&4
  4903.         dflt=void
  4904.         rp="What type does your signal handler return?"
  4905.         . ./myread
  4906.         case "$ans" in
  4907.         v*) val="$define";;
  4908.         *) val="$undef";;
  4909.         esac;;
  4910.     "$define")
  4911.         echo "As you already told me, signal handler returns void." >&4;;
  4912.     *)
  4913.         echo "As you already told me, signal handler returns int." >&4;;
  4914.     esac
  4915. fi
  4916. set d_voidsig
  4917. eval $setvar
  4918. case "$d_voidsig" in
  4919. "$define") signal_t="void";;
  4920. *) signal_t="int";;
  4921. esac
  4922. $rm -f $$.tmp
  4923.  
  4924. : check for ability to cast large floats to 32-bit ints.
  4925. echo " "
  4926. echo 'Checking whether your C compiler can cast large floats to int32.' >&4
  4927. if $test "$intsize" -eq 4; then
  4928.     xxx=int
  4929. else
  4930.     xxx=long
  4931. fi
  4932. $cat >try.c <<EOCP
  4933. #include <sys/types.h>
  4934. #include <signal.h>
  4935. $signal_t blech() { exit(3); }
  4936. main()
  4937. {
  4938.     $xxx i32;
  4939.     double f;
  4940.     int result = 0;
  4941.     signal(SIGFPE, blech);
  4942.  
  4943.     f = (double) 0x7fffffff;
  4944.     f = 10 * f;
  4945.     i32  = ($xxx) f;
  4946.  
  4947.     if (i32 != ($xxx) f)
  4948.         result |= 1;
  4949.     exit(result);
  4950. }
  4951. EOCP
  4952. if $cc -o try $ccflags try.c >/dev/null 2>&1; then
  4953.     ./try
  4954.     yyy=$?
  4955. else
  4956.     echo "(I can't seem to compile the test program--assuming it can't)"
  4957.     yyy=1
  4958. fi
  4959. case "$yyy" in
  4960. 0)    val="$define"
  4961.     echo "Yup, it can."
  4962.     ;;
  4963. *)    val="$undef"
  4964.     echo "Nope, it can't."
  4965.     ;;
  4966. esac
  4967. set d_casti32
  4968. eval $setvar
  4969. $rm -f try try.*
  4970.  
  4971. : check for ability to cast negative floats to unsigned
  4972. echo " "
  4973. echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
  4974. $cat >try.c <<EOCP
  4975. #include <sys/types.h>
  4976. #include <signal.h>
  4977. $signal_t blech() { exit(7); }
  4978. $signal_t blech_in_list() { exit(4); }
  4979. unsigned long dummy_long(p) unsigned long p; { return p; }
  4980. unsigned int dummy_int(p) unsigned int p; { return p; }
  4981. unsigned short dummy_short(p) unsigned short p; { return p; }
  4982. main()
  4983. {
  4984.     double f = -123.;
  4985.     unsigned long along;
  4986.     unsigned int aint;
  4987.     unsigned short ashort;
  4988.     int result = 0;
  4989.  
  4990.     signal(SIGFPE, blech);
  4991.     along = (unsigned long)f;
  4992.     aint = (unsigned int)f;
  4993.     ashort = (unsigned short)f;
  4994.     if (along != (unsigned long)-123)
  4995.         result |= 1;
  4996.     if (aint != (unsigned int)-123)
  4997.         result |= 1;
  4998.     if (ashort != (unsigned short)-123)
  4999.         result |= 1;
  5000.     f = (double)0x40000000;
  5001.     f = f + f;
  5002.     along = 0;
  5003.     along = (unsigned long)f;
  5004.     if (along != 0x80000000)
  5005.         result |= 2;
  5006.     f -= 1.;
  5007.     along = 0;
  5008.     along = (unsigned long)f;
  5009.     if (along != 0x7fffffff)
  5010.         result |= 1;
  5011.     f += 2.;
  5012.     along = 0;
  5013.     along = (unsigned long)f;
  5014.     if (along != 0x80000001)
  5015.         result |= 2;
  5016.     if (result)
  5017.         exit(result);
  5018.     signal(SIGFPE, blech_in_list);
  5019.     f = 123.;
  5020.     along = dummy_long((unsigned long)f);
  5021.     aint = dummy_int((unsigned int)f);
  5022.     ashort = dummy_short((unsigned short)f);
  5023.     if (along != (unsigned long)123)
  5024.         result |= 4;
  5025.     if (aint != (unsigned int)123)
  5026.         result |= 4;
  5027.     if (ashort != (unsigned short)123)
  5028.         result |= 4;
  5029.     exit(result);
  5030.  
  5031. }
  5032. EOCP
  5033. if $cc -o try $ccflags try.c >/dev/null 2>&1; then
  5034.     ./try
  5035.     castflags=$?
  5036. else
  5037.     echo "(I can't seem to compile the test program--assuming it can't)"
  5038.     castflags=7
  5039. fi
  5040. case "$castflags" in
  5041. 0)    val="$define"
  5042.     echo "Yup, it can."
  5043.     ;;
  5044. *)    val="$undef"
  5045.     echo "Nope, it can't."
  5046.     ;;
  5047. esac
  5048. set d_castneg
  5049. eval $setvar
  5050. $rm -f try.*
  5051.  
  5052. : see if vprintf exists
  5053. echo " "
  5054. if set vprintf val -f d_vprintf; eval $csym; $val; then
  5055.     echo 'vprintf() found.' >&4
  5056.     val="$define"
  5057.     $cat >vprintf.c <<'EOF'
  5058. #include <varargs.h>
  5059.  
  5060. main() { xxx("foo"); }
  5061.  
  5062. xxx(va_alist)
  5063. va_dcl
  5064. {
  5065.     va_list args;
  5066.     char buf[10];
  5067.  
  5068.     va_start(args);
  5069.     exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
  5070. }
  5071. EOF
  5072.     if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then
  5073.         echo "Your vsprintf() returns (int)." >&4
  5074.         val2="$undef"
  5075.     else
  5076.         echo "Your vsprintf() returns (char*)." >&4
  5077.         val2="$define"
  5078.     fi
  5079. else
  5080.     echo 'vprintf() NOT found.' >&4
  5081.         val="$undef"
  5082.         val2="$undef"
  5083. fi
  5084. set d_vprintf
  5085. eval $setvar
  5086. val=$val2
  5087. set d_charvspr
  5088. eval $setvar
  5089.  
  5090. : see if chown exists
  5091. set chown d_chown
  5092. eval $inlibc
  5093.  
  5094. : see if chroot exists
  5095. set chroot d_chroot
  5096. eval $inlibc
  5097.  
  5098. : see if chsize exists
  5099. set chsize d_chsize
  5100. eval $inlibc
  5101.  
  5102. : check for const keyword
  5103. echo " "
  5104. echo 'Checking to see if your C compiler knows about "const"...' >&4
  5105. $cat >const.c <<'EOCP'
  5106. typedef struct spug { int drokk; } spug;
  5107. main()
  5108. {
  5109.     const char *foo;
  5110.     const spug y;
  5111. }
  5112. EOCP
  5113. if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
  5114.     val="$define"
  5115.     echo "Yup, it does."
  5116. else
  5117.     val="$undef"
  5118.     echo "Nope, it doesn't."
  5119. fi
  5120. set d_const
  5121. eval $setvar
  5122.  
  5123. : see if crypt exists
  5124. echo " "
  5125. if set crypt val -f d_crypt; eval $csym; $val; then
  5126.     echo 'crypt() found.' >&4
  5127.     val="$define"
  5128.     cryptlib=''
  5129. else
  5130.     cryptlib=`./loc Slibcrypt.a "" $xlibpth`
  5131.     if $test -z "$cryptlib"; then
  5132.         cryptlib=`./loc Mlibcrypt.a "" $xlibpth`
  5133.     else
  5134.         cryptlib=-lcrypt
  5135.     fi
  5136.     if $test -z "$cryptlib"; then
  5137.         cryptlib=`./loc Llibcrypt.a "" $xlibpth`
  5138.     else
  5139.         cryptlib=-lcrypt
  5140.     fi
  5141.     if $test -z "$cryptlib"; then
  5142.         cryptlib=`./loc libcrypt.a "" $libpth`
  5143.     else
  5144.         cryptlib=-lcrypt
  5145.     fi
  5146.     if $test -z "$cryptlib"; then
  5147.         echo 'crypt() NOT found.' >&4
  5148.         val="$undef"
  5149.     else
  5150.         val="$define"
  5151.     fi
  5152. fi
  5153. set d_crypt
  5154. eval $setvar
  5155.  
  5156. : get csh whereabouts
  5157. case "$csh" in
  5158. 'csh') val="$undef" ;;
  5159. *) val="$define" ;;
  5160. esac
  5161. set d_csh
  5162. eval $setvar
  5163. full_csh=$csh
  5164.  
  5165. : see if cuserid exists
  5166. set cuserid d_cuserid
  5167. eval $inlibc
  5168.  
  5169. : define an alternate in-header-list? function
  5170. inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
  5171. cont=true; xxf="echo \"<\$1> found.\" >&4";
  5172. case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
  5173. *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
  5174. esac;
  5175. case $# in 4) instead=instead;; *) instead="at last";; esac;
  5176. while $test "$cont"; do
  5177.     xxx=`./findhdr $1`
  5178.     var=$2; eval "was=\$$2";
  5179.     if $test "$xxx" && $test -r "$xxx";
  5180.     then eval $xxf;
  5181.     eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
  5182.         cont="";
  5183.     else eval $xxnf;
  5184.     eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
  5185.     set $yyy; shift; shift; yyy=$@;
  5186.     case $# in 0) cont="";;
  5187.     2) xxf="echo \"but I found <\$1> $instead.\" >&4";
  5188.         xxnf="echo \"and I did not find <\$1> either.\" >&4";;
  5189.     *) xxf="echo \"but I found <\$1\> instead.\" >&4";
  5190.         xxnf="echo \"there is no <\$1>, ...\" >&4";;
  5191.     esac;
  5192. done;
  5193. while $test "$yyy";
  5194. do set $yyy; var=$2; eval "was=\$$2";
  5195.     eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
  5196.     set $yyy; shift; shift; yyy=$@;
  5197. done'
  5198.  
  5199. : see if this is a limits.h system
  5200. set limits.h i_limits
  5201. eval $inhdr
  5202.  
  5203. : see if this is a float.h system
  5204. set float.h i_float
  5205. eval $inhdr
  5206.  
  5207. : See if number of significant digits in a double precision number is known
  5208. echo " "
  5209. $cat >dbl_dig.c <<EOM
  5210. #$i_limits I_LIMITS
  5211. #$i_float I_FLOAT
  5212. #ifdef I_LIMITS
  5213. #include <limits.h>
  5214. #endif
  5215. #ifdef I_FLOAT
  5216. #include <float.h>
  5217. #endif
  5218. #ifdef DBL_DIG
  5219. printf("Contains DBL_DIG");
  5220. #endif
  5221. EOM
  5222. $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
  5223. if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
  5224.     echo "DBL_DIG found." >&4
  5225.     val="$define"
  5226. else
  5227.     echo "DBL_DIG NOT found." >&4
  5228.     val="$undef"
  5229. fi
  5230. $rm -f dbl_dig.?
  5231. set d_dbl_dig
  5232. eval $setvar
  5233.  
  5234. : see if difftime exists
  5235. set difftime d_difftime
  5236. eval $inlibc
  5237.  
  5238. : see if this is a dirent system
  5239. echo " "
  5240. if xinc=`./findhdr dirent.h`; $test "$xinc"; then
  5241.     val="$define"
  5242.     echo "<dirent.h> found." >&4
  5243. else
  5244.     val="$undef"
  5245.     if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
  5246.         echo "<sys/dir.h> found." >&4
  5247.         echo " "
  5248.     else
  5249.         xinc=`./findhdr sys/ndir.h`
  5250.     fi
  5251.     echo "<dirent.h> NOT found." >&4
  5252. fi
  5253. set i_dirent
  5254. eval $setvar
  5255.  
  5256. : Look for type of directory structure.
  5257. echo " "
  5258. $cppstdin $cppflags $cppminus < "$xinc" > try.c
  5259.  
  5260. case "$direntrytype" in
  5261. ''|' ')
  5262.     case "$i_dirent" in
  5263.     $define) guess1='struct dirent' ;;
  5264.     *) guess1='struct direct'  ;;
  5265.     esac
  5266.     ;;
  5267. *)    guess1="$direntrytype"
  5268.     ;;
  5269. esac
  5270.  
  5271. case "$guess1" in
  5272. 'struct dirent') guess2='struct direct' ;;
  5273. *) guess2='struct dirent' ;;
  5274. esac
  5275.         
  5276. if $contains "$guess1" try.c >/dev/null 2>&1; then
  5277.     direntrytype="$guess1"
  5278.     echo "Your directory entries are $direntrytype." >&4
  5279. elif $contains "$guess2" try.c >/dev/null 2>&1; then
  5280.     direntrytype="$guess2"
  5281.     echo "Your directory entries seem to be $direntrytype." >&4
  5282. else
  5283.     echo "I don't recognize your system's directory entries." >&4
  5284.     rp="What type is used for directory entries on this system?"
  5285.     dflt="$guess1"
  5286.     . ./myread
  5287.     direntrytype="$ans"
  5288. fi
  5289. $rm -f try.c
  5290.  
  5291.  
  5292. : see if the directory entry stores field length
  5293. echo " "
  5294. $cppstdin $cppflags $cppminus < "$xinc" > try.c
  5295. if $contains 'd_namlen' try.c >/dev/null 2>&1; then
  5296.     echo "Good, your directory entry keeps length information in d_namlen." >&4
  5297.     val="$define"
  5298. else
  5299.     echo "Your directory entry does not know about the d_namlen field." >&4
  5300.     val="$undef"
  5301. fi
  5302. set d_dirnamlen
  5303. eval $setvar
  5304. $rm -f try.c
  5305.  
  5306. : see if dlerror exists
  5307. xxx_runnm="$runnm"
  5308. runnm=false
  5309. set dlerror d_dlerror
  5310. eval $inlibc
  5311. runnm="$xxx_runnm"
  5312.  
  5313. : see if dld is available
  5314. set dld.h i_dld
  5315. eval $inhdr
  5316.  
  5317. : see if dlopen exists
  5318. xxx_runnm="$runnm"
  5319. runnm=false
  5320. set dlopen d_dlopen
  5321. eval $inlibc
  5322. runnm="$xxx_runnm"
  5323.  
  5324. : determine which dynamic loading, if any, to compile in
  5325. echo " "
  5326. dldir="ext/DynaLoader"
  5327. case "$usedl" in
  5328. $define|y|true)
  5329.     dflt='y'
  5330.     usedl="$define"
  5331.     ;;
  5332. $undef|n|false)
  5333.     dflt='n'
  5334.     usedl="$undef"
  5335.     ;;
  5336. *) 
  5337.     dflt='n'
  5338.     case "$d_dlopen" in
  5339.         $define) dflt='y' ;;
  5340.     esac
  5341.     case "$i_dld" in
  5342.         $define) dflt='y' ;;
  5343.     esac
  5344.     : Does a dl_xxx.xs file exist for this operating system
  5345.     $test -f ../$dldir/dl_${osname}.xs && dflt='y'
  5346.     ;;
  5347. esac
  5348. rp="Do you wish to use dynamic loading?"
  5349. . ./myread
  5350. usedl="$ans"
  5351. case "$ans" in
  5352. y*) usedl="$define"
  5353.     case "$dlsrc" in
  5354.     '')
  5355.         if $test -f ../$dldir/dl_${osname}.xs ; then
  5356.             dflt="$dldir/dl_${osname}.xs"
  5357.         elif $test "$d_dlopen" = "$define" ; then
  5358.             dflt="$dldir/dl_dlopen.xs"
  5359.         elif $test "$i_dld" = "$define" ; then
  5360.             dflt="$dldir/dl_dld.xs"
  5361.         else
  5362.             dflt=''
  5363.         fi
  5364.         ;;
  5365.     *)    dflt="$dldir/$dlsrc"
  5366.         ;;
  5367.     esac
  5368.     echo "The following dynamic loading files are available:"
  5369.     : Can not go over to $dldir because getfile has path hard-coded in.
  5370.     cd ..; ls -C $dldir/dl*.xs; cd UU
  5371.     rp="Source file to use for dynamic loading"
  5372.     fn="fne"
  5373.     . ./getfile
  5374.     usedl="$define"
  5375.     : emulate basename
  5376.     dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
  5377.  
  5378.     $cat << EOM
  5379.  
  5380. Some systems may require passing special flags to $cc -c to
  5381. compile modules that will be used to create a shared library.
  5382. To use no flags, say "none".
  5383.  
  5384. EOM
  5385.     case "$cccdlflags" in
  5386.     '')    case "$gccversion" in
  5387.         '') case "$osname" in
  5388.             hpux)    dflt='+z' ;;
  5389.             next)    dflt='none' ;;
  5390.             solaris|svr4*|esix*) dflt='-Kpic' ;;
  5391.             sunos)    dflt='-pic' ;;
  5392.             *)    dflt='none' ;;
  5393.             esac ;;
  5394.         *)    dflt='-fpic' ;;
  5395.         esac ;;
  5396.     *)    dflt="$cccdlflags" ;;
  5397.     esac
  5398.     rp="Any special flags to pass to $cc -c to compile shared library modules?"
  5399.     . ./myread
  5400.     case "$ans" in
  5401.     none) cccdlflags=' ' ;;
  5402.     *) cccdlflags="$ans" ;;
  5403.     esac
  5404.  
  5405.     cat << EOM
  5406.  
  5407. Some systems use ld to create libraries that can be dynamically loaded,
  5408. while other systems (such as those using ELF) use $cc.
  5409.  
  5410. EOM
  5411.     case "$ld" in
  5412.     '')    $cat >try.c <<'EOM'
  5413. /* Test for whether ELF binaries are produced */
  5414. #include <fcntl.h>
  5415. #include <stdlib.h>
  5416. main() {
  5417.     char b[4];
  5418.     int i = open("a.out",O_RDONLY);
  5419.     if(i == -1) 
  5420.         exit(1); /* fail */
  5421.     if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
  5422.         exit(0); /* succeed (yes, it's ELF) */
  5423.     else
  5424.         exit(1); /* fail */
  5425. }
  5426. EOM
  5427.         if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
  5428.             cat <<EOM
  5429. You appear to have ELF support.  I'll use $cc to build dynamic libraries.
  5430. EOM
  5431.             dflt="$cc"
  5432.         else
  5433.             echo "I'll use ld to build dynamic libraries."
  5434.             dflt='ld'
  5435.         fi
  5436.         rm -f try.c a.out
  5437.         ;;
  5438.     *)    dflt="$ld"
  5439.         ;;
  5440.     esac
  5441.  
  5442.     rp="What command should be used to create dynamic libraries?"
  5443.     . ./myread
  5444.     ld="$ans"
  5445.  
  5446.     cat << EOM
  5447.  
  5448. Some systems may require passing special flags to $ld to create a
  5449. library that can be dynamically loaded.  If your ld flags include
  5450. -L/other/path options to locate libraries outside your loader's normal
  5451. search path, you may need to specify those -L options here as well.  To
  5452. use no flags, say "none".
  5453.  
  5454. EOM
  5455.     case "$lddlflags" in
  5456.     '') case "$osname" in
  5457.             hpux)  dflt='-b' ;;
  5458.             linux)    dflt='-shared' ;;
  5459.             next)  dflt='none' ;;
  5460.             solaris) dflt='-G' ;;
  5461.             sunos) dflt='-assert nodefinitions' ;;
  5462.             svr4*|esix*) dflt="-G $ldflags" ;;
  5463.             *)     dflt='none' ;;
  5464.             esac
  5465.             ;;
  5466.     *) dflt="$lddlflags" ;;
  5467.     esac
  5468.  
  5469. : Try to guess additional flags to pick up local libraries.
  5470. for thisflag in $ldflags; do
  5471.     case "$thisflag" in
  5472.     -L*)
  5473.         case " $dflt " in
  5474.         *" $thisflag "*) ;;
  5475.         *) dflt="$dflt $thisflag" ;;
  5476.         esac
  5477.         ;;
  5478.     esac
  5479. done
  5480.  
  5481. case "$dflt" in
  5482. '') dflt='none' ;;
  5483. esac
  5484.  
  5485.     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
  5486.     . ./myread
  5487.     case "$ans" in
  5488.     none) lddlflags=' ' ;;
  5489.     *) lddlflags="$ans" ;;
  5490.     esac
  5491.  
  5492.     cat <<EOM
  5493.  
  5494. Some systems may require passing special flags to $cc to indicate that
  5495. the resulting executable will use dynamic linking.  To use no flags,
  5496. say "none".
  5497.  
  5498. EOM
  5499.     case "$ccdlflags" in
  5500.     '') case "$osname" in
  5501.         hpux)    dflt='-Wl,-E' ;;
  5502.         linux)    dflt='-rdynamic' ;;
  5503.         next)    dflt='none' ;;
  5504.         sunos)    dflt='none' ;;
  5505.         *)    dflt='none' ;;
  5506.         esac ;;
  5507.     *)  dflt="$ccdlflags" ;;
  5508.     esac
  5509.     rp="Any special flags to pass to $cc to use dynamic loading?"
  5510.     . ./myread
  5511.     case "$ans" in
  5512.     none) ccdlflags=' ' ;;
  5513.     *) ccdlflags="$ans" ;;
  5514.     esac
  5515.     ;;
  5516. *)  usedl="$undef"
  5517.     ld='ld'
  5518.     dlsrc='dl_none.xs'
  5519.     lddlflags=''
  5520.     ccdlflags=''
  5521.     ;;
  5522. esac
  5523.  
  5524. val="$undef"
  5525. case "$osname" in
  5526. esix*|svr4*)
  5527.     case "$usedl" in
  5528.     $define)
  5529.     $cat <<EOM
  5530.  
  5531. System V Release 4 systems can support dynamic loading
  5532. only if libperl is created as a shared library.
  5533.  
  5534. EOM
  5535.     val="$define"
  5536.     ;;
  5537.     esac ;;
  5538. esac
  5539. set d_shrplib; eval $setvar
  5540. case "$d_shrplib" in
  5541. $define)
  5542.     cat <<EOM >&4
  5543.  
  5544. Be sure to add the perl source directory to the LD_LIBRARY_PATH
  5545. environment variable before running make:
  5546.     LD_LIBRARY_PATH=`cd ..;pwd`; export LD_LIBRARY_PATH
  5547. or
  5548.     setenv LD_LIBRARY_PATH `cd ..;pwd`
  5549.  
  5550. EOM
  5551. ;;
  5552. esac
  5553. case "$d_shrplib" in
  5554. $define)
  5555.     case "$shrpdir" in
  5556.     "")    dflt="$archlib/CORE";;
  5557.     *)    dflt="$shrpdir";;
  5558.     esac
  5559.     rp="What directory should we install the shared libperl into?"
  5560.     fn="d~"
  5561.     . ./getfile
  5562.     shrpdir="$ans"
  5563.     ;;
  5564. *)    shrpdir='none'
  5565.     ;;
  5566. esac
  5567.  
  5568. : see if dlfcn is available
  5569. set dlfcn.h i_dlfcn
  5570. eval $inhdr
  5571.  
  5572. case "$usedl" in
  5573. $define|y|true)
  5574.     $cat << EOM
  5575.  
  5576. On a few systems, the dynamically loaded modules that perl generates and uses
  5577. will need a different extension then shared libs. The default will probably
  5578. be appropriate.
  5579.  
  5580. EOM
  5581.     case "$dlext" in
  5582.     '')    dflt="$so" ;;
  5583.     *)    dflt="$dlext" ;;
  5584.     esac
  5585.     rp='What is the extension of dynamically loaded modules'
  5586.     . ./myread
  5587.     dlext="$ans"
  5588.     ;;
  5589. *)
  5590.     dlext="none"
  5591.     ;;
  5592. esac
  5593.  
  5594. : Check if dlsym need a leading underscore
  5595. echo " "
  5596. val="$undef"
  5597.  
  5598. case "$dlsrc" in
  5599. dl_dlopen.xs)
  5600.     echo "Checking whether your dlsym() needs a leading underscore ..." >&4
  5601.     $cat >dyna.c <<'EOM'
  5602. fred () { }
  5603. EOM
  5604.  
  5605. $cat >fred.c<<EOM
  5606.  
  5607. #include <stdio.h>
  5608. #$i_dlfcn I_DLFCN
  5609. #ifdef I_DLFCN
  5610. #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
  5611. #else
  5612. #include <sys/types.h>
  5613. #include <nlist.h>
  5614. #include <link.h>
  5615. #endif
  5616.  
  5617. extern int fred() ;
  5618.  
  5619. main()
  5620. {
  5621.     void * handle ;
  5622.     void * symbol ;
  5623. #ifndef RTLD_LAZY
  5624.     int mode = 1 ;
  5625. #else
  5626.     int mode = RTLD_LAZY ;
  5627. #endif
  5628.     handle = dlopen("./dyna.$dlext", mode) ;
  5629.     if (handle == NULL) {
  5630.         printf ("1\n") ;
  5631.         exit(0);
  5632.     }
  5633.     symbol = dlsym(handle, "fred") ;
  5634.     if (symbol == NULL) {
  5635.         /* try putting a leading underscore */
  5636.         symbol = dlsym(handle, "_fred") ;
  5637.         if (symbol == NULL) {
  5638.             printf ("2\n") ;
  5639.             exit(0);
  5640.         }
  5641.         printf ("3\n") ;
  5642.     }
  5643.     else
  5644.         printf ("4\n") ;
  5645.     exit(0);
  5646. }
  5647. EOM
  5648.     if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
  5649.         $ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && 
  5650.         $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then
  5651.         xxx=`./fred`
  5652.         case $xxx in
  5653.         1)    echo "Test program failed using dlopen." >&4
  5654.             echo "Perhaps you should not use dynamic loading." >&4;;
  5655.         2)    echo "Test program failed using dlsym." >&4
  5656.             echo "Perhaps you should not use dynamic loading." >&4;;
  5657.         3)    echo "dlsym needs a leading underscore" >&4
  5658.             val="$define" ;;
  5659.         4)    echo "dlsym doesn't need a leading underscore." >&4;;
  5660.         esac
  5661.     else
  5662.         echo "I can't compile and run the test program." >&4
  5663.     fi
  5664.     ;;
  5665. esac
  5666.         
  5667. $rm -f fred fred.? dyna.$dlext dyna.?
  5668.  
  5669. set d_dlsymun
  5670. eval $setvar
  5671.  
  5672. : see if dup2 exists
  5673. set dup2 d_dup2
  5674. eval $inlibc
  5675.  
  5676. : Locate the flags for 'open()'
  5677. echo " "
  5678. $cat >open3.c <<'EOCP'
  5679. #include <sys/types.h>
  5680. #ifdef I_FCNTL
  5681. #include <fcntl.h>
  5682. #endif
  5683. #ifdef I_SYS_FILE
  5684. #include <sys/file.h>
  5685. #endif
  5686. main() {
  5687.     if(O_RDONLY);
  5688. #ifdef O_TRUNC
  5689.     exit(0);
  5690. #else
  5691.     exit(1);
  5692. #endif
  5693. }
  5694. EOCP
  5695. : check sys/file.h first to get FREAD on Sun
  5696. if $test `./findhdr sys/file.h` && \
  5697.         $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then
  5698.     h_sysfile=true;
  5699.     echo "<sys/file.h> defines the O_* constants..." >&4
  5700.     if ./open3; then
  5701.         echo "and you have the 3 argument form of open()." >&4
  5702.         val="$define"
  5703.     else
  5704.         echo "but not the 3 argument form of open().  Oh, well." >&4
  5705.         val="$undef"
  5706.     fi
  5707. elif $test `./findhdr fcntl.h` && \
  5708.         $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then
  5709.     h_fcntl=true;
  5710.     echo "<fcntl.h> defines the O_* constants..." >&4
  5711.     if ./open3; then
  5712.         echo "and you have the 3 argument form of open()." >&4
  5713.         val="$define"
  5714.     else
  5715.         echo "but not the 3 argument form of open().  Oh, well." >&4
  5716.         val="$undef"
  5717.     fi
  5718. else
  5719.     val="$undef"
  5720.     echo "I can't find the O_* constant definitions!  You got problems." >&4
  5721. fi
  5722. set d_open3
  5723. eval $setvar
  5724. $rm -f open3*
  5725.  
  5726. : check for non-blocking I/O stuff
  5727. case "$h_sysfile" in
  5728. true) echo "#include <sys/file.h>" > head.c;;
  5729. *)
  5730.     case "$h_fcntl" in
  5731.     true) echo "#include <fcntl.h>" > head.c;;
  5732.     *) echo "#include <sys/fcntl.h>" > head.c;;
  5733.     esac
  5734.     ;;
  5735. esac
  5736. echo " "
  5737. echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
  5738. case "$o_nonblock" in
  5739. '')
  5740.     $cat head.c > try.c
  5741.     $cat >>try.c <<'EOCP'
  5742. main() {
  5743. #ifdef O_NONBLOCK
  5744.     printf("O_NONBLOCK\n");
  5745.     exit(0);
  5746. #endif
  5747. #ifdef O_NDELAY
  5748.     printf("O_NDELAY\n");
  5749.     exit(0);
  5750. #endif
  5751. #ifdef FNDELAY
  5752.     printf("FNDELAY\n");
  5753.     exit(0);
  5754. #endif
  5755.     exit(0);
  5756. }
  5757. EOCP
  5758.     if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
  5759.         o_nonblock=`./try`
  5760.         case "$o_nonblock" in
  5761.         '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
  5762.         *) echo "Seems like we can use $o_nonblock.";;
  5763.         esac
  5764.     else
  5765.         echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
  5766.     fi
  5767.     ;;
  5768. *) echo "Using $hint value $o_nonblock.";;
  5769. esac
  5770. $rm -f try try.* .out core
  5771.  
  5772. echo " "
  5773. echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
  5774. case "$eagain" in
  5775. '')
  5776.     $cat head.c > try.c
  5777.     $cat >>try.c <<EOCP
  5778. #include <errno.h>
  5779. #include <sys/types.h>
  5780. #include <signal.h>
  5781. #define MY_O_NONBLOCK $o_nonblock
  5782. extern int errno;
  5783. $signal_t blech(x) int x; { exit(3); }
  5784. EOCP
  5785.     $cat >> try.c <<'EOCP'
  5786. main()
  5787. {
  5788.     int pd[2];
  5789.     int pu[2];
  5790.     char buf[1];
  5791.     char string[100];
  5792.  
  5793.     pipe(pd);    /* Down: child -> parent */
  5794.     pipe(pu);    /* Up: parent -> child */
  5795.     if (0 != fork()) {
  5796.         int ret;
  5797.         close(pd[1]);    /* Parent reads from pd[0] */
  5798.         close(pu[0]);    /* Parent writes (blocking) to pu[1] */
  5799.         if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
  5800.             exit(1);
  5801.         signal(SIGALRM, blech);
  5802.         alarm(5);
  5803.         if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
  5804.             exit(2);
  5805.         sprintf(string, "%d\n", ret);
  5806.         write(2, string, strlen(string));
  5807.         alarm(0);
  5808. #ifdef EAGAIN
  5809.         if (errno == EAGAIN) {
  5810.             printf("EAGAIN\n");
  5811.             goto ok;
  5812.         }
  5813. #endif
  5814. #ifdef EWOULDBLOCK
  5815.         if (errno == EWOULDBLOCK)
  5816.             printf("EWOULDBLOCK\n");
  5817. #endif
  5818.     ok:
  5819.         write(pu[1], buf, 1);    /* Unblocks child, tell it to close our pipe */
  5820.         sleep(2);                /* Give it time to close our pipe */
  5821.         alarm(5);
  5822.         ret = read(pd[0], buf, 1);    /* Should read EOF */
  5823.         alarm(0);
  5824.         sprintf(string, "%d\n", ret);
  5825.         write(3, string, strlen(string));
  5826.         exit(0);
  5827.     }
  5828.  
  5829.     close(pd[0]);            /* We write to pd[1] */
  5830.     close(pu[1]);            /* We read from pu[0] */
  5831.     read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
  5832.     close(pd[1]);            /* Pipe pd is now fully closed! */
  5833.     exit(0);                /* Bye bye, thank you for playing! */
  5834. }
  5835. EOCP
  5836.     if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then
  5837.         echo "$startsh" >mtry
  5838.         echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
  5839.         chmod +x mtry
  5840.         ./mtry >/dev/null 2>&1
  5841.         case $? in
  5842.         0) eagain=`$cat try.out`;;
  5843.         1) echo "Could not perform non-blocking setting!";;
  5844.         2) echo "I did a successful read() for something that was not there!";;
  5845.         3) echo "Hmm... non-blocking I/O does not seem to be working!";;
  5846.         *) echo "Something terribly wrong happened during testing.";;
  5847.         esac
  5848.         rd_nodata=`$cat try.ret`
  5849.         echo "A read() system call with no data present returns $rd_nodata."
  5850.         case "$rd_nodata" in
  5851.         0|-1) ;;
  5852.         *)
  5853.             echo "(That's peculiar, fixing that to be -1.)"
  5854.             rd_nodata=-1
  5855.             ;;
  5856.         esac
  5857.         case "$eagain" in
  5858.         '')
  5859.             echo "Forcing errno EAGAIN on read() with no data available."
  5860.             eagain=EAGAIN
  5861.             ;;
  5862.         *)
  5863.             echo "Your read() sets errno to $eagain when no data is available."
  5864.             ;;
  5865.         esac
  5866.         status=`$cat try.err`
  5867.         case "$status" in
  5868.         0) echo "And it correctly returns 0 to signal EOF.";;
  5869.         -1) echo "But it also returns -1 to signal EOF, so be careful!";;
  5870.         *) echo "However, your read() returns '$status' on EOF??";;
  5871.         esac
  5872.         val="$define"
  5873.         if test "$status" -eq "$rd_nodata"; then
  5874.             echo "WARNING: you can't distinguish between EOF and no data!"
  5875.             val="$undef"
  5876.         fi
  5877.     else
  5878.         echo "I can't compile the test program--assuming errno EAGAIN will do."
  5879.         eagain=EAGAIN
  5880.     fi
  5881.     set d_eofnblk
  5882.     eval $setvar
  5883.     ;;
  5884. *)
  5885.     echo "Using $hint value $eagain."
  5886.     echo "Your read() returns $rd_nodata when no data is present."
  5887.     case "$d_eofnblk" in
  5888.     "$define") echo "And you can see EOF because read() returns 0.";;
  5889.     "$undef") echo "But you can't see EOF status from read() returned value.";;
  5890.     *)
  5891.         echo "(Assuming you can't see EOF status from read anyway.)"
  5892.         d_eofnblk=$undef
  5893.         ;;
  5894.     esac
  5895.     ;;
  5896. esac
  5897. $rm -f try try.* .out core head.c mtry
  5898.  
  5899. : see if fchmod exists
  5900. set fchmod d_fchmod
  5901. eval $inlibc
  5902.  
  5903. : see if fchown exists
  5904. set fchown d_fchown
  5905. eval $inlibc
  5906.  
  5907. : see if this is an fcntl system
  5908. set fcntl d_fcntl
  5909. eval $inlibc
  5910.  
  5911. : see if fgetpos exists
  5912. set fgetpos d_fgetpos
  5913. eval $inlibc
  5914.  
  5915. : see if flock exists
  5916. set flock d_flock
  5917. eval $inlibc
  5918.  
  5919. : see if fork exists
  5920. set fork d_fork
  5921. eval $inlibc
  5922.  
  5923. : see if pathconf exists
  5924. set pathconf d_pathconf
  5925. eval $inlibc
  5926.  
  5927. : see if fpathconf exists
  5928. set fpathconf d_fpathconf
  5929. eval $inlibc
  5930.  
  5931. : see if fsetpos exists
  5932. set fsetpos d_fsetpos
  5933. eval $inlibc
  5934.  
  5935. : see if gethostent exists
  5936. set gethostent d_gethent
  5937. eval $inlibc
  5938.  
  5939. : see if getlogin exists
  5940. set getlogin d_getlogin
  5941. eval $inlibc
  5942.  
  5943. : see if getpgrp exists
  5944. set getpgrp d_getpgrp
  5945. eval $inlibc
  5946.  
  5947. : see if getpgrp2 exists
  5948. set getpgrp2 d_getpgrp2
  5949. eval $inlibc
  5950.  
  5951. : see if getppid exists
  5952. set getppid d_getppid
  5953. eval $inlibc
  5954.  
  5955. : see if getpriority exists
  5956. set getpriority d_getprior
  5957. eval $inlibc
  5958.  
  5959. : see if this is a netinet/in.h or sys/in.h system
  5960. set netinet/in.h i_niin sys/in.h i_sysin
  5961. eval $inhdr
  5962.  
  5963. : see if htonl --and friends-- exists
  5964. val=''
  5965. set htonl val
  5966. eval $inlibc
  5967.  
  5968. : Maybe they are macros.
  5969. case "$val" in
  5970. $undef)
  5971.     $cat >htonl.c <<EOM
  5972. #include <stdio.h>
  5973. #include <sys/types.h>
  5974. #$i_niin I_NETINET_IN
  5975. #$i_sysin I_SYS_IN
  5976. #ifdef I_NETINET_IN
  5977. #include <netinet/in.h>
  5978. #endif
  5979. #ifdef I_SYS_IN
  5980. #include <sys/in.h>
  5981. #endif
  5982. #ifdef htonl
  5983. printf("Defined as a macro.");
  5984. #endif
  5985. EOM
  5986.     $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
  5987.     if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
  5988.         val="$define"
  5989.         echo "But it seems to be defined as a macro." >&4
  5990.     fi
  5991.     $rm -f htonl.?
  5992.     ;;
  5993. esac
  5994. set d_htonl
  5995. eval $setvar
  5996.  
  5997. : see which of string.h or strings.h is needed
  5998. echo " "
  5999. strings=`./findhdr string.h`
  6000. if $test "$strings" && $test -r "$strings"; then
  6001.     echo "Using <string.h> instead of <strings.h>." >&4
  6002.     val="$define"
  6003. else
  6004.     val="$undef"
  6005.     strings=`./findhdr strings.h`
  6006.     if $test "$strings" && $test -r "$strings"; then
  6007.         echo "Using <strings.h> instead of <string.h>." >&4
  6008.     else
  6009.         echo "No string header found -- You'll surely have problems." >&4
  6010.     fi
  6011. fi
  6012. set i_string
  6013. eval $setvar
  6014. case "$i_string" in
  6015. "$undef") strings=`./findhdr strings.h`;;
  6016. *)      strings=`./findhdr string.h`;;
  6017. esac
  6018.  
  6019. : index or strchr
  6020. echo " "
  6021. if set index val -f; eval $csym; $val; then
  6022.     if set strchr val -f d_strchr; eval $csym; $val; then
  6023.         if $contains strchr "$strings" >/dev/null 2>&1 ; then
  6024.             val="$define"
  6025.             vali="$undef"
  6026.             echo "strchr() found." >&4
  6027.         else
  6028.             val="$undef"
  6029.             vali="$define"
  6030.             echo "index() found." >&4
  6031.         fi
  6032.     else
  6033.         val="$undef"
  6034.         vali="$define"
  6035.         echo "index() found." >&4
  6036.     fi
  6037. else
  6038.     if set strchr val -f d_strchr; eval $csym; $val; then
  6039.         val="$define"
  6040.         vali="$undef"
  6041.         echo "strchr() found." >&4
  6042.     else
  6043.         echo "No index() or strchr() found!" >&4
  6044.         val="$undef"
  6045.         vali="$undef"
  6046.     fi
  6047. fi
  6048. set d_strchr; eval $setvar
  6049. val="$vali"
  6050. set d_index; eval $setvar
  6051.  
  6052. : Look for isascii
  6053. echo " "
  6054. $cat >isascii.c <<'EOCP'
  6055. #include <stdio.h>
  6056. #include <ctype.h>
  6057. main() {
  6058.     int c = 'A';
  6059.     if (isascii(c))
  6060.         exit(0);
  6061.     else
  6062.         exit(1);
  6063. }
  6064. EOCP
  6065. if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
  6066.     echo "isascii() found." >&4
  6067.     val="$define"
  6068. else
  6069.     echo "isascii() NOT found." >&4
  6070.     val="$undef"
  6071. fi
  6072. set d_isascii
  6073. eval $setvar
  6074. $rm -f isascii*
  6075.  
  6076. : see if killpg exists
  6077. set killpg d_killpg
  6078. eval $inlibc
  6079.  
  6080. : see if link exists
  6081. set link d_link
  6082. eval $inlibc
  6083.  
  6084. : see if localeconv exists
  6085. set localeconv d_locconv
  6086. eval $inlibc
  6087.  
  6088. : see if lockf exists
  6089. set lockf d_lockf
  6090. eval $inlibc
  6091.  
  6092. : see if lstat exists
  6093. set lstat d_lstat
  6094. eval $inlibc
  6095.  
  6096. : see if mblen exists
  6097. set mblen d_mblen
  6098. eval $inlibc
  6099.  
  6100. : see if mbstowcs exists
  6101. set mbstowcs d_mbstowcs
  6102. eval $inlibc
  6103.  
  6104. : see if mbtowc exists
  6105. set mbtowc d_mbtowc
  6106. eval $inlibc
  6107.  
  6108. : see if memcmp exists
  6109. set memcmp d_memcmp
  6110. eval $inlibc
  6111.  
  6112. : see if memcpy exists
  6113. set memcpy d_memcpy
  6114. eval $inlibc
  6115.  
  6116. : see if memmove exists
  6117. set memmove d_memmove
  6118. eval $inlibc
  6119.  
  6120. : see if memset exists
  6121. set memset d_memset
  6122. eval $inlibc
  6123.  
  6124. : see if mkdir exists
  6125. set mkdir d_mkdir
  6126. eval $inlibc
  6127.  
  6128. : see if mkfifo exists
  6129. set mkfifo d_mkfifo
  6130. eval $inlibc
  6131.  
  6132. : see if mktime exists
  6133. set mktime d_mktime
  6134. eval $inlibc
  6135.  
  6136. : see if msgctl exists
  6137. set msgctl d_msgctl
  6138. eval $inlibc
  6139.  
  6140. : see if msgget exists
  6141. set msgget d_msgget
  6142. eval $inlibc
  6143.  
  6144. : see if msgsnd exists
  6145. set msgsnd d_msgsnd
  6146. eval $inlibc
  6147.  
  6148. : see if msgrcv exists
  6149. set msgrcv d_msgrcv
  6150. eval $inlibc
  6151.  
  6152. : see how much of the 'msg*(2)' library is present.
  6153. h_msg=true
  6154. echo " "
  6155. case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
  6156. *"$undef"*) h_msg=false;;
  6157. esac
  6158. : we could also check for sys/ipc.h ...
  6159. if $h_msg && $test `./findhdr sys/msg.h`; then
  6160.     echo "You have the full msg*(2) library." >&4
  6161.     val="$define"
  6162. else
  6163.     echo "You don't have the full msg*(2) library." >&4
  6164.     val="$undef"
  6165. fi
  6166. set d_msg
  6167. eval $setvar
  6168.  
  6169. : see if this is a malloc.h system
  6170. set malloc.h i_malloc
  6171. eval $inhdr
  6172.  
  6173. : see if stdlib is available
  6174. set stdlib.h i_stdlib
  6175. eval $inhdr
  6176.  
  6177. : determine which malloc to compile in
  6178. echo " "
  6179. case "$usemymalloc" in
  6180. ''|y*|true)    dflt='y' ;;
  6181. n*|false)    dflt='n' ;;
  6182. *)    dflt="$usemymalloc" ;;
  6183. esac
  6184. rp="Do you wish to attempt to use the malloc that comes with $package?"
  6185. . ./myread
  6186. usemymalloc="$ans"
  6187. case "$ans" in
  6188. y*|true)
  6189.     usemymalloc='y'
  6190.     mallocsrc='malloc.c'
  6191.     mallocobj='malloc.o'
  6192.     d_mymalloc="$define"
  6193.     case "$libs" in
  6194.     *-lmalloc*)
  6195.         : Remove malloc from list of libraries to use
  6196.         echo "Removing unneeded -lmalloc from library list" >&4
  6197.         set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
  6198.         shift
  6199.         libs="$*"
  6200.         echo "libs = $libs" >&4
  6201.         ;;
  6202.     esac
  6203.     ;;
  6204. *)
  6205.     usemymalloc='n'
  6206.     mallocsrc=''
  6207.     mallocobj=''
  6208.     d_mymalloc="$undef"
  6209.     ;;
  6210. esac
  6211.  
  6212. : compute the return types of malloc and free
  6213. echo " "
  6214. $cat >malloc.c <<END
  6215. #$i_malloc I_MALLOC
  6216. #$i_stdlib I_STDLIB
  6217. #include <stdio.h>
  6218. #include <sys/types.h>
  6219. #ifdef I_MALLOC
  6220. #include <malloc.h>
  6221. #endif
  6222. #ifdef I_STDLIB
  6223. #include <stdlib.h>
  6224. #endif
  6225. #ifdef TRY_MALLOC
  6226. void *malloc();
  6227. #endif
  6228. #ifdef TRY_FREE
  6229. void free();
  6230. #endif
  6231. END
  6232. case "$malloctype" in
  6233. '')
  6234.     if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
  6235.         malloctype='void *'
  6236.     else
  6237.         malloctype='char *'
  6238.     fi
  6239.     ;;
  6240. esac
  6241. echo "Your system wants malloc to return '$malloctype', it would seem." >&4
  6242.  
  6243. case "$freetype" in
  6244. '')
  6245.     if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
  6246.         freetype='void'
  6247.     else
  6248.         freetype='int'
  6249.     fi
  6250.     ;;
  6251. esac
  6252. echo "Your system uses $freetype free(), it would seem." >&4
  6253. $rm -f malloc.[co]
  6254. : see if nice exists
  6255. set nice d_nice
  6256. eval $inlibc
  6257.  
  6258. : see if pause exists
  6259. set pause d_pause
  6260. eval $inlibc
  6261.  
  6262. : see if pipe exists
  6263. set pipe d_pipe
  6264. eval $inlibc
  6265.  
  6266. : see if poll exists
  6267. set poll d_poll
  6268. eval $inlibc
  6269.  
  6270. : see if this is a pwd.h system
  6271. set pwd.h i_pwd
  6272. eval $inhdr
  6273.  
  6274. case "$i_pwd" in
  6275. $define)
  6276.     xxx=`./findhdr pwd.h`
  6277.     $cppstdin $cppflags $cppminus < $xxx >$$.h
  6278.  
  6279.     if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
  6280.         val="$define"
  6281.     else
  6282.         val="$undef"
  6283.     fi
  6284.     set d_pwquota
  6285.     eval $setvar
  6286.  
  6287.     if $contains 'pw_age' $$.h >/dev/null 2>&1; then
  6288.         val="$define"
  6289.     else
  6290.         val="$undef"
  6291.     fi
  6292.     set d_pwage
  6293.     eval $setvar
  6294.  
  6295.     if $contains 'pw_change' $$.h >/dev/null 2>&1; then
  6296.         val="$define"
  6297.     else
  6298.         val="$undef"
  6299.     fi
  6300.     set d_pwchange
  6301.     eval $setvar
  6302.  
  6303.     if $contains 'pw_class' $$.h >/dev/null 2>&1; then
  6304.         val="$define"
  6305.     else
  6306.         val="$undef"
  6307.     fi
  6308.     set d_pwclass
  6309.     eval $setvar
  6310.  
  6311.     if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
  6312.         val="$define"
  6313.     else
  6314.         val="$undef"
  6315.     fi
  6316.     set d_pwexpire
  6317.     eval $setvar
  6318.  
  6319.     if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
  6320.         val="$define"
  6321.     else
  6322.         val="$undef"
  6323.     fi
  6324.     set d_pwcomment
  6325.     eval $setvar
  6326.  
  6327.     $rm -f $$.h
  6328.     ;;
  6329. *)
  6330.     val="$undef"; 
  6331.     set d_pwquota; eval $setvar
  6332.     set d_pwage; eval $setvar
  6333.     set d_pwchange; eval $setvar
  6334.     set d_pwclass; eval $setvar
  6335.     set d_pwexpire; eval $setvar
  6336.     set d_pwcomment; eval $setvar
  6337.     ;;
  6338. esac
  6339.  
  6340. : see if readdir and friends exist
  6341. set readdir d_readdir
  6342. eval $inlibc
  6343. set seekdir d_seekdir
  6344. eval $inlibc
  6345. set telldir d_telldir
  6346. eval $inlibc
  6347. set rewinddir d_rewinddir
  6348. eval $inlibc
  6349.  
  6350. : see if readlink exists
  6351. set readlink d_readlink
  6352. eval $inlibc
  6353.  
  6354. : see if rename exists
  6355. set rename d_rename
  6356. eval $inlibc
  6357.  
  6358. : see if rmdir exists
  6359. set rmdir d_rmdir
  6360. eval $inlibc
  6361.  
  6362. : can bcopy handle overlapping blocks?
  6363. val="$undef"
  6364. case "$d_bcopy" in
  6365. "$define")
  6366.     echo " "
  6367.     echo "Checking to see if your bcopy() can do overlapping copies..." >&4
  6368.     $cat >foo.c <<'EOCP'
  6369. main()
  6370. {
  6371. char buf[128], abc[128];
  6372. char *b;
  6373. int len;
  6374. int off;
  6375. int align;
  6376.  
  6377. bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
  6378.  
  6379. for (align = 7; align >= 0; align--) {
  6380.     for (len = 36; len; len--) {
  6381.         b = buf+align;
  6382.         bcopy(abc, b, len);
  6383.         for (off = 1; off <= len; off++) {
  6384.             bcopy(b, b+off, len);
  6385.             bcopy(b+off, b, len);
  6386.             if (bcmp(b, abc, len))
  6387.                 exit(1);
  6388.         }
  6389.     }
  6390. }
  6391. exit(0);
  6392. }
  6393. EOCP
  6394.     if $cc $ccflags $ldflags foo.c -o safebcpy $libs >/dev/null 2>&1; then
  6395.         if ./safebcpy 2>/dev/null; then
  6396.             echo "Yes, it can."
  6397.             val="$define"
  6398.         else
  6399.             echo "It can't, sorry."
  6400.         fi
  6401.     else
  6402.         echo "(I can't compile the test program, so we'll assume not...)"
  6403.     fi
  6404.     ;;
  6405. esac
  6406. $rm -f foo.* safebcpy core
  6407. set d_safebcpy
  6408. eval $setvar
  6409.  
  6410. : can memcpy handle overlapping blocks?
  6411. val="$undef"
  6412. case "$d_memcpy" in
  6413. "$define")
  6414.     echo " "
  6415.     echo "Checking to see if your memcpy() can do overlapping copies..." >&4
  6416.     $cat >foo.c <<'EOCP'
  6417. main()
  6418. {
  6419. char buf[128], abc[128];
  6420. char *b;
  6421. int len;
  6422. int off;
  6423. int align;
  6424.  
  6425. memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
  6426.  
  6427. for (align = 7; align >= 0; align--) {
  6428.     for (len = 36; len; len--) {
  6429.         b = buf+align;
  6430.         memcpy(b, abc, len);
  6431.         for (off = 1; off <= len; off++) {
  6432.             memcpy(b+off, b, len);
  6433.             memcpy(b, b+off, len);
  6434.             if (memcmp(b, abc, len))
  6435.                 exit(1);
  6436.         }
  6437.     }
  6438. }
  6439. exit(0);
  6440. }
  6441. EOCP
  6442.     if $cc $ccflags $ldflags foo.c -o safemcpy $libs >/dev/null 2>&1; then
  6443.         if ./safemcpy 2>/dev/null; then
  6444.             echo "Yes, it can."
  6445.             val="$define"
  6446.         else
  6447.             echo "It can't, sorry."
  6448.         fi
  6449.     else
  6450.         echo "(I can't compile the test program, so we'll assume not...)"
  6451.     fi
  6452.     ;;
  6453. esac
  6454. $rm -f foo.* safemcpy core
  6455. set d_safemcpy
  6456. eval $setvar
  6457.  
  6458. : see if select exists
  6459. set select d_select
  6460. eval $inlibc
  6461.  
  6462. : see if semctl exists
  6463. set semctl d_semctl
  6464. eval $inlibc
  6465.  
  6466. : see if semget exists
  6467. set semget d_semget
  6468. eval $inlibc
  6469.  
  6470. : see if semop exists
  6471. set semop d_semop
  6472. eval $inlibc
  6473.  
  6474. : see how much of the 'sem*(2)' library is present.
  6475. h_sem=true
  6476. echo " "
  6477. case "$d_semctl$d_semget$d_semop" in
  6478. *"$undef"*) h_sem=false;;
  6479. esac
  6480. : we could also check for sys/ipc.h ...
  6481. if $h_sem && $test `./findhdr sys/sem.h`; then
  6482.     echo "You have the full sem*(2) library." >&4
  6483.     val="$define"
  6484. else
  6485.     echo "You don't have the full sem*(2) library." >&4
  6486.     val="$undef"
  6487. fi
  6488. set d_sem
  6489. eval $setvar
  6490.  
  6491. : see if setegid exists
  6492. set setegid d_setegid
  6493. eval $inlibc
  6494.  
  6495. : see if seteuid exists
  6496. set seteuid d_seteuid
  6497. eval $inlibc
  6498.  
  6499. : see if setlinebuf exists
  6500. set setlinebuf d_setlinebuf
  6501. eval $inlibc
  6502.  
  6503. : see if setlocale exists
  6504. set setlocale d_setlocale
  6505. eval $inlibc
  6506.  
  6507. : see if setpgid exists
  6508. set setpgid d_setpgid
  6509. eval $inlibc
  6510.  
  6511. : see if setpgrp2 exists
  6512. set setpgrp2 d_setpgrp2
  6513. eval $inlibc
  6514.  
  6515. : see if setpriority exists
  6516. set setpriority d_setprior
  6517. eval $inlibc
  6518.  
  6519. : see if setregid exists
  6520. set setregid d_setregid
  6521. eval $inlibc
  6522. set setresgid d_setresgid
  6523. eval $inlibc
  6524.  
  6525. : see if setreuid exists
  6526. set setreuid d_setreuid
  6527. eval $inlibc
  6528. set setresuid d_setresuid
  6529. eval $inlibc
  6530.  
  6531. : see if setrgid exists
  6532. set setrgid d_setrgid
  6533. eval $inlibc
  6534.  
  6535. : see if setruid exists
  6536. set setruid d_setruid
  6537. eval $inlibc
  6538.  
  6539. : see if setsid exists
  6540. set setsid d_setsid
  6541. eval $inlibc
  6542.  
  6543. : see if shmctl exists
  6544. set shmctl d_shmctl
  6545. eval $inlibc
  6546.  
  6547. : see if shmget exists
  6548. set shmget d_shmget
  6549. eval $inlibc
  6550.  
  6551. : see if shmat exists
  6552. set shmat d_shmat
  6553. eval $inlibc
  6554. : see what shmat returns
  6555. case "$d_shmat" in
  6556. "$define")
  6557.     $cat >shmat.c <<'END'
  6558. #include <sys/shm.h>
  6559. void *shmat();
  6560. END
  6561.     if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
  6562.         shmattype='void *'
  6563.     else
  6564.         shmattype='char *'
  6565.     fi
  6566.     echo "and it returns ($shmattype)." >&4
  6567.     : see if a prototype for shmat is available
  6568.     xxx=`./findhdr sys/shm.h`
  6569.     $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
  6570.     if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
  6571.         val="$define"
  6572.     else
  6573.         val="$undef"
  6574.     fi
  6575.     $rm -f shmat.[co]
  6576.     ;;
  6577. *)
  6578.     val="$undef"
  6579.     ;;
  6580. esac
  6581. set d_shmatprototype
  6582. eval $setvar
  6583.  
  6584. : see if shmdt exists
  6585. set shmdt d_shmdt
  6586. eval $inlibc
  6587.  
  6588. : see how much of the 'shm*(2)' library is present.
  6589. h_shm=true
  6590. echo " "
  6591. case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
  6592. *"$undef"*) h_shm=false;;
  6593. esac
  6594. : we could also check for sys/ipc.h ...
  6595. if $h_shm && $test `./findhdr sys/shm.h`; then
  6596.     echo "You have the full shm*(2) library." >&4
  6597.     val="$define"
  6598. else
  6599.     echo "You don't have the full shm*(2) library." >&4
  6600.     val="$undef"
  6601. fi
  6602. set d_shm
  6603. eval $setvar
  6604.  
  6605. : see if sigvector exists -- since sigvec will match the substring
  6606. echo " "
  6607. if set sigvector val -f d_sigvectr; eval $csym; $val; then
  6608.     echo 'sigvector() found--you must be running HP-UX.' >&4
  6609.     val="$define"; set d_sigvectr; eval $setvar
  6610.     val="$define"; set d_sigvec; eval $setvar
  6611. else
  6612. : try the original name
  6613.     d_sigvectr="$undef"
  6614.     if set sigvec val -f d_sigvec; eval $csym; $val; then
  6615.         echo 'sigvec() found.' >&4
  6616.         val="$define"; set d_sigvec; eval $setvar
  6617.     else
  6618.         echo 'sigvec() not found--race conditions with signals may occur.' >&4
  6619.         val="$undef"; set d_sigvec; eval $setvar
  6620.     fi
  6621. fi
  6622.  
  6623. : see if we have sigaction
  6624. set sigaction d_sigaction
  6625. eval $inlibc
  6626.  
  6627.  
  6628. : see if sigsetjmp exists
  6629. echo " "
  6630. case "$d_sigsetjmp" in
  6631. '')
  6632.     $cat >set.c <<EOP
  6633. #include <setjmp.h>
  6634. sigjmp_buf env;
  6635. int set = 1;
  6636. main()
  6637. {
  6638.     if (sigsetjmp(env,1))
  6639.         exit(set);
  6640.     set = 0;
  6641.     siglongjmp(env, 1);
  6642.     exit(1);
  6643. }
  6644. EOP
  6645.     if $cc $ccflags $ldflags set.c -o set $libs >/dev/null 2>&1; then
  6646.         if ./set >/dev/null 2>&1; then
  6647.             echo "POSIX sigsetjmp found." >&4
  6648.             val="$define"
  6649.         else
  6650.             $cat <<EOM
  6651. Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
  6652. EOM
  6653.             val="$undef"
  6654.         fi
  6655.     else
  6656.         echo "Sigsetjmp not found." >&4
  6657.         val="$undef"
  6658.     fi
  6659.     ;;
  6660. *) val="$d_sigsetjmp"
  6661.     case "$d_sigsetjmp" in
  6662.     $define) echo "POSIX sigsetjmp found." >&4;;
  6663.     $undef) echo "Sigsetjmp not found." >&4;;
  6664.     esac
  6665.     ;;
  6666. esac
  6667. set d_sigsetjmp
  6668. eval $setvar
  6669. $rm -f set.c set
  6670.  
  6671. socketlib=''
  6672. sockethdr=''
  6673. : see whether socket exists
  6674. echo " "
  6675. $echo $n "Hmm... $c" >&4
  6676. if set socket val -f d_socket; eval $csym; $val; then
  6677.     echo "Looks like you have Berkeley networking support." >&4
  6678.     d_socket="$define"
  6679.     if set setsockopt val -f; eval $csym; $val; then
  6680.         d_oldsock="$undef"
  6681.     else
  6682.         echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
  6683.         d_oldsock="$define"
  6684.     fi
  6685. else
  6686.     if $contains socklib libc.list >/dev/null 2>&1; then
  6687.         echo "Looks like you have Berkeley networking support." >&4
  6688.         d_socket="$define"
  6689.         : we will have to assume that it supports the 4.2 BSD interface
  6690.         d_oldsock="$undef"
  6691.     else
  6692.         echo "You don't have Berkeley networking in libc.a..." >&4
  6693.         if test -f /usr/lib/libnet.a; then
  6694.             ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) ||  \
  6695.             ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list
  6696.             if $contains socket libc.list >/dev/null 2>&1; then
  6697.             echo "...but the Wollongong group seems to have hacked it in." >&4
  6698.                 socketlib="-lnet"
  6699.                 sockethdr="-I/usr/netinclude"
  6700.                 d_socket="$define"
  6701.                 if $contains setsockopt libc.list >/dev/null 2>&1; then
  6702.                     d_oldsock="$undef"
  6703.                 else
  6704.                     echo "...using the old 4.1c interface, rather than 4.2" >&4
  6705.                     d_oldsock="$define"
  6706.                 fi
  6707.             else
  6708.                 echo "or even in libnet.a, which is peculiar." >&4
  6709.                 d_socket="$undef"
  6710.                 d_oldsock="$undef"
  6711.             fi
  6712.         else
  6713.             echo "or anywhere else I see." >&4
  6714.             d_socket="$undef"
  6715.             d_oldsock="$undef"
  6716.         fi
  6717.     fi
  6718. fi
  6719.  
  6720. : see if socketpair exists
  6721. set socketpair d_sockpair
  6722. eval $inlibc
  6723.  
  6724. : see if stat knows about block sizes
  6725. echo " "
  6726. xxx=`./findhdr sys/stat.h`
  6727. if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
  6728.     if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
  6729.         echo "Your stat() knows about block sizes." >&4
  6730.         val="$define"
  6731.     else
  6732.         echo "Your stat() doesn't know about block sizes." >&4
  6733.         val="$undef"
  6734.     fi
  6735. else
  6736.     echo "Your stat() doesn't know about block sizes." >&4
  6737.     val="$undef"
  6738. fi
  6739. set d_statblks
  6740. eval $setvar
  6741.  
  6742. : see if _ptr and _cnt from stdio act std
  6743. echo " "
  6744. if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
  6745.     echo "(Looks like you have stdio.h from Linux.)"
  6746.     case "$stdio_ptr" in
  6747.     '') stdio_ptr='((fp)->_IO_read_ptr)'
  6748.         ptr_lval=$define
  6749.         ;;
  6750.     *)    ptr_lval=$d_stdio_ptr_lval;;
  6751.     esac
  6752.     case "$stdio_cnt" in
  6753.     '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
  6754.         cnt_lval=$undef
  6755.         ;;
  6756.     *)    cnt_lval=$d_stdio_cnt_lval;;
  6757.     esac
  6758.     case "$stdio_base" in
  6759.     '') stdio_base='((fp)->_IO_read_base)';;
  6760.     esac
  6761.     case "$stdio_bufsiz" in
  6762.     '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
  6763.     esac
  6764. else
  6765.     case "$stdio_ptr" in
  6766.     '') stdio_ptr='((fp)->_ptr)'
  6767.         ptr_lval=$define
  6768.         ;;
  6769.     *)    ptr_lval=$d_stdio_ptr_lval;;
  6770.     esac
  6771.     case "$stdio_cnt" in
  6772.     '') stdio_cnt='((fp)->_cnt)'
  6773.         cnt_lval=$define
  6774.         ;;
  6775.     *)    cnt_lval=$d_stdio_cnt_lval;;
  6776.     esac
  6777.     case "$stdio_base" in
  6778.     '') stdio_base='((fp)->_base)';;
  6779.     esac
  6780.     case "$stdio_bufsiz" in
  6781.     '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
  6782.     esac
  6783. fi
  6784. : test whether _ptr and _cnt really work
  6785. echo "Checking how std your stdio is..." >&4
  6786. $cat >try.c <<EOP
  6787. #include <stdio.h>
  6788. #define FILE_ptr(fp)    $stdio_ptr
  6789. #define FILE_cnt(fp)    $stdio_cnt
  6790. main() { 
  6791.     FILE *fp = fopen("try.c", "r");
  6792.     char c = getc(fp);
  6793.     if (
  6794.         18 <= FILE_cnt(fp) &&
  6795.         strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
  6796.     )
  6797.         exit(0);
  6798.     exit(1);
  6799. }
  6800. EOP
  6801. val="$undef"
  6802. if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
  6803.     if ./try; then
  6804.         echo "Your stdio acts pretty std."
  6805.         val="$define"
  6806.     else
  6807.         echo "Your stdio isn't very std."
  6808.     fi
  6809. else
  6810.     echo "Your stdio doesn't appear very std."
  6811. fi
  6812. $rm -f try.c try
  6813. set d_stdstdio
  6814. eval $setvar
  6815.  
  6816. : Can _ptr be used as an lvalue?
  6817. case "$d_stdstdio$ptr_lval" in
  6818. $define$define) val=$define ;;
  6819. *) val=$undef ;;
  6820. esac
  6821. set d_stdio_ptr_lval
  6822. eval $setvar
  6823.  
  6824. : Can _cnt be used as an lvalue?
  6825. case "$d_stdstdio$cnt_lval" in
  6826. $define$define) val=$define ;;
  6827. *) val=$undef ;;
  6828. esac
  6829. set d_stdio_cnt_lval
  6830. eval $setvar
  6831.  
  6832. : see if _base is also standard
  6833. val="$undef"
  6834. case "$d_stdstdio" in
  6835. $define)
  6836.     $cat >try.c <<EOP
  6837. #include <stdio.h>
  6838. #define FILE_base(fp)    $stdio_base
  6839. #define FILE_bufsiz(fp)    $stdio_bufsiz
  6840. main() { 
  6841.     FILE *fp = fopen("try.c", "r");
  6842.     char c = getc(fp);
  6843.     if (
  6844.         19 <= FILE_bufsiz(fp) &&
  6845.         strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
  6846.     )
  6847.         exit(0);
  6848.     exit(1);
  6849. }
  6850. EOP
  6851.     if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
  6852.         if ./try; then
  6853.             echo "Even its _base field acts std."
  6854.             val="$define"
  6855.         else
  6856.             echo "But its _base field isn't std."
  6857.         fi
  6858.     else
  6859.         echo "However, it seems to be lacking the _base field."
  6860.     fi
  6861.     $rm -f try.c try
  6862.     ;;
  6863. esac
  6864. set d_stdiobase
  6865. eval $setvar
  6866.  
  6867. : see if strcoll exists
  6868. set strcoll d_strcoll
  6869. eval $inlibc
  6870.  
  6871. : check for structure copying
  6872. echo " "
  6873. echo "Checking to see if your C compiler can copy structs..." >&4
  6874. $cat >try.c <<'EOCP'
  6875. main()
  6876. {
  6877.     struct blurfl {
  6878.         int dyick;
  6879.     } foo, bar;
  6880.  
  6881.     foo = bar;
  6882. }
  6883. EOCP
  6884. if $cc -c try.c >/dev/null 2>&1 ; then
  6885.     val="$define"
  6886.     echo "Yup, it can."
  6887. else
  6888.     val="$undef"
  6889.     echo "Nope, it can't."
  6890. fi
  6891. set d_strctcpy
  6892. eval $setvar
  6893. $rm -f try.*
  6894.  
  6895. : see if strerror and/or sys_errlist[] exist
  6896. echo " "
  6897. if set strerror val -f d_strerror; eval $csym; $val; then
  6898.     echo 'strerror() found.' >&4
  6899.     d_strerror="$define"
  6900.     d_strerrm='strerror(e)'
  6901.     if set sys_errlist val -a d_syserrlst; eval $csym; $val; then    
  6902.         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
  6903.         d_syserrlst="$define"
  6904.     else
  6905.     echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
  6906.         d_syserrlst="$undef"
  6907.     fi
  6908. elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
  6909.     $contains '#[     ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
  6910.     echo 'strerror() found in string header.' >&4
  6911.     d_strerror="$define"
  6912.     d_strerrm='strerror(e)'
  6913.     if set sys_errlist val -a d_syserrlst; eval $csym; $val; then    
  6914.         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
  6915.         d_syserrlst="$define"
  6916.     else
  6917.         echo "(You don't appear to have any sys_errlist[], how can this be?)"
  6918.         d_syserrlst="$undef"
  6919.     fi
  6920. elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
  6921. echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
  6922.     d_strerror="$undef"
  6923.     d_syserrlst="$define"
  6924.     d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
  6925. else
  6926.     echo 'strerror() and sys_errlist[] NOT found.' >&4
  6927.     d_strerror="$undef"
  6928.     d_syserrlst="$undef"
  6929.     d_strerrm='"unknown"'
  6930. fi
  6931.  
  6932. : see if strxfrm exists
  6933. set strxfrm d_strxfrm
  6934. eval $inlibc
  6935.  
  6936. : see if symlink exists
  6937. set symlink d_symlink
  6938. eval $inlibc
  6939.  
  6940. : see if syscall exists
  6941. set syscall d_syscall
  6942. eval $inlibc
  6943.  
  6944. : see if sysconf exists
  6945. set sysconf d_sysconf
  6946. eval $inlibc
  6947.  
  6948. : see if system exists
  6949. set system d_system
  6950. eval $inlibc
  6951.  
  6952. : see if tcgetpgrp exists
  6953. set tcgetpgrp d_tcgetpgrp
  6954. eval $inlibc
  6955.  
  6956. : see if tcsetpgrp exists
  6957. set tcsetpgrp d_tcsetpgrp
  6958. eval $inlibc
  6959.  
  6960. : define an is-a-typedef? function
  6961. typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
  6962. case "$inclist" in
  6963. "") inclist="sys/types.h";;
  6964. esac;
  6965. eval "varval=\$$var";
  6966. case "$varval" in
  6967. "")
  6968.     $rm -f temp.c;
  6969.     for inc in $inclist; do
  6970.         echo "#include <$inc>" >>temp.c;
  6971.     done;
  6972.     $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
  6973.     if $contains $type temp.E >/dev/null 2>&1; then
  6974.         eval "$var=\$type";
  6975.     else
  6976.         eval "$var=\$def";
  6977.     fi;
  6978.     $rm -f temp.?;;
  6979. *) eval "$var=\$varval";;
  6980. esac'
  6981.  
  6982. : see if this is a sys/times.h system
  6983. set sys/times.h i_systimes
  6984. eval $inhdr
  6985.  
  6986. : see if times exists
  6987. echo " "
  6988. if set times val -f d_times; eval $csym; $val; then
  6989.     echo 'times() found.' >&4
  6990.     d_times="$define"
  6991.     inc=''
  6992.     case "$i_systimes" in
  6993.     "$define") inc='sys/times.h';;
  6994.     esac
  6995.     set clock_t clocktype long stdio.h sys/types.h $inc
  6996.     eval $typedef
  6997.     dflt="$clocktype"
  6998.     echo " "
  6999.     rp="What type is returned by times() on this system?"
  7000.     . ./myread
  7001.     clocktype="$ans"
  7002. else
  7003.     echo 'times() NOT found, hope that will do.' >&4
  7004.     d_times="$undef"
  7005.     clocktype='int'
  7006. fi
  7007.  
  7008. : see if truncate exists
  7009. set truncate d_truncate
  7010. eval $inlibc
  7011.  
  7012. : see if tzname[] exists
  7013. echo " "
  7014. if set tzname val -a d_tzname; eval $csym; $val; then
  7015.     val="$define"
  7016.     echo 'tzname[] found.' >&4
  7017. else
  7018.     val="$undef"
  7019.     echo 'tzname[] NOT found.' >&4
  7020. fi
  7021. set d_tzname
  7022. eval $setvar
  7023.  
  7024. : see if umask exists
  7025. set umask d_umask
  7026. eval $inlibc
  7027.  
  7028. : see how we will look up host name
  7029. echo " "
  7030. if false; then
  7031.     : dummy stub to allow use of elif
  7032. elif set uname val -f d_uname; eval $csym; $val; then
  7033.     if ./xenix; then
  7034.         $cat <<'EOM'
  7035. uname() was found, but you're running xenix, and older versions of xenix
  7036. have a broken uname(). If you don't really know whether your xenix is old
  7037. enough to have a broken system call, use the default answer.
  7038.  
  7039. EOM
  7040.         dflt=y
  7041.         case "$d_uname" in
  7042.         "$define") dflt=n;;
  7043.         esac
  7044.         rp='Is your uname() broken?'
  7045.         . ./myread
  7046.         case "$ans" in
  7047.         n*) d_uname="$define"; call=uname;;
  7048.         esac
  7049.     else
  7050.         echo 'uname() found.' >&4
  7051.         d_uname="$define"
  7052.         call=uname
  7053.     fi
  7054. fi
  7055. case "$d_gethname" in
  7056. '') d_gethname="$undef";;
  7057. esac
  7058. case "$d_uname" in
  7059. '') d_uname="$undef";;
  7060. esac
  7061. case "$d_phostname" in
  7062. '') d_phostname="$undef";;
  7063. esac
  7064.  
  7065. : backward compatibility for d_hvfork
  7066. if test X$d_hvfork != X; then
  7067.     d_vfork="$d_hvfork"
  7068.     d_hvfork=''
  7069. fi
  7070. : see if there is a vfork
  7071. val=''
  7072. set vfork val
  7073. eval $inlibc
  7074.  
  7075. : Ok, but do we want to use it. vfork is reportedly unreliable in 
  7076. : perl on Solaris 2.x, and probably elsewhere.
  7077. case "$val" in
  7078. $define)
  7079.     echo " "
  7080.     case "$usevfork" in
  7081.     false) dflt='n';;
  7082.     *) dflt='y';;
  7083.     esac
  7084.     rp="Some systems have problems with vfork().  Do you want to use it?"
  7085.     . ./myread
  7086.     case "$ans" in
  7087.     y|Y) ;;
  7088.     *)
  7089.         echo "Ok, we won't use vfork()."
  7090.         val="$undef"
  7091.         ;;
  7092.     esac
  7093.     ;;
  7094. esac
  7095. set d_vfork
  7096. eval $setvar
  7097. case "$d_vfork" in
  7098. $define) usevfork='true';;
  7099. *) usevfork='false';;
  7100. esac
  7101.  
  7102. : see if this is an sysdir system
  7103. set sys/dir.h i_sysdir
  7104. eval $inhdr
  7105.  
  7106. : see if this is an sysndir system
  7107. set sys/ndir.h i_sysndir
  7108. eval $inhdr
  7109.  
  7110. : see if closedir exists
  7111. set closedir d_closedir
  7112. eval $inlibc
  7113.  
  7114. case "$d_closedir" in
  7115. "$define")
  7116.     echo " "
  7117.     echo "Checking whether closedir() returns a status..." >&4
  7118.     cat > closedir.c <<EOM
  7119. #$i_dirent I_DIRENT        /**/
  7120. #$i_sysdir I_SYS_DIR        /**/
  7121. #$i_sysndir I_SYS_NDIR        /**/
  7122.  
  7123. #if defined(I_DIRENT)
  7124. #include <dirent.h>
  7125. #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
  7126. #include <sys/dir.h>
  7127. #endif
  7128. #else
  7129. #ifdef I_SYS_NDIR
  7130. #include <sys/ndir.h>
  7131. #else
  7132. #ifdef I_SYS_DIR
  7133. #ifdef hp9000s500
  7134. #include <ndir.h>    /* may be wrong in the future */
  7135. #else
  7136. #include <sys/dir.h>
  7137. #endif
  7138. #endif
  7139. #endif
  7140. #endif 
  7141. int main() { return closedir(opendir(".")); }
  7142. EOM
  7143.     if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
  7144.         if ./closedir > /dev/null 2>&1 ; then
  7145.             echo "Yes, it does."
  7146.             val="$undef"
  7147.         else
  7148.             echo "No, it doesn't."
  7149.             val="$define"
  7150.         fi
  7151.     else
  7152.         echo "(I can't seem to compile the test program--assuming it doesn't)"
  7153.         val="$define"
  7154.     fi
  7155.     ;;
  7156. *)
  7157.     val="$undef";
  7158.     ;;
  7159. esac
  7160. set d_void_closedir
  7161. eval $setvar
  7162. $rm -f closedir*
  7163. : check for volatile keyword
  7164. echo " "
  7165. echo 'Checking to see if your C compiler knows about "volatile"...' >&4
  7166. $cat >try.c <<'EOCP'
  7167. main()
  7168. {
  7169.     typedef struct _goo_struct goo_struct;
  7170.     goo_struct * volatile goo = ((goo_struct *)0);
  7171.     struct _goo_struct {
  7172.         long long_int;
  7173.         int reg_int;
  7174.         char char_var;
  7175.     };
  7176.     typedef unsigned short foo_t;
  7177.     char *volatile foo;
  7178.     volatile int bar;
  7179.     volatile foo_t blech;
  7180.     foo = foo;
  7181. }
  7182. EOCP
  7183. if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
  7184.     val="$define"
  7185.     echo "Yup, it does."
  7186. else
  7187.     val="$undef"
  7188.     echo "Nope, it doesn't."
  7189. fi
  7190. set d_volatile
  7191. eval $setvar
  7192. $rm -f try.*
  7193.  
  7194. : see if there is a wait4
  7195. set wait4 d_wait4
  7196. eval $inlibc
  7197.  
  7198. : see if waitpid exists
  7199. set waitpid d_waitpid
  7200. eval $inlibc
  7201.  
  7202. : see if wcstombs exists
  7203. set wcstombs d_wcstombs
  7204. eval $inlibc
  7205.  
  7206. : see if wctomb exists
  7207. set wctomb d_wctomb
  7208. eval $inlibc
  7209.  
  7210. : preserve RCS keywords in files with variable substitution, grrr
  7211. Date='$Date'
  7212. Id='$Id'
  7213. Log='$Log'
  7214. RCSfile='$RCSfile'
  7215. Revision='$Revision'
  7216.  
  7217. : check for alignment requirements
  7218. echo " "
  7219. case "$alignbytes" in
  7220. '') echo "Checking alignment constraints..." >&4
  7221.     $cat >try.c <<'EOCP'
  7222. struct foobar {
  7223.     char foo;
  7224.     double bar;
  7225. } try;
  7226. main()
  7227. {
  7228.     printf("%d\n", (char *)&try.bar - (char *)&try.foo);
  7229. }
  7230. EOCP
  7231.     if $cc $ccflags try.c -o try >/dev/null 2>&1; then
  7232.         dflt=`./try`
  7233.     else
  7234.         dflt='8'
  7235.         echo"(I can't seem to compile the test program...)"
  7236.     fi
  7237.     ;;
  7238. *) dflt="$alignbytes"
  7239.     ;;
  7240. esac
  7241. rp="Doubles must be aligned on a how-many-byte boundary?"
  7242. . ./myread
  7243. alignbytes="$ans"
  7244. $rm -f try.c try
  7245.  
  7246. : Define several unixisms. Hints files or command line options
  7247. : can be used to override them.
  7248. case "$ar" in
  7249. '') ar='ar';;
  7250. esac
  7251. case "$lib_ext" in
  7252. '') lib_ext='.a';;
  7253. esac
  7254. case "$obj_ext" in
  7255. '') obj_ext='.o';;
  7256. esac
  7257. case "$path_sep" in
  7258. '') path_sep=':';;
  7259. esac
  7260. : Which makefile gets called first.  This is used by make depend.
  7261. case "$firstmakefile" in
  7262. '') firstmakefile='makefile';;
  7263. esac
  7264.  
  7265. : check for ordering of bytes in a long
  7266. case "$byteorder" in
  7267. '')
  7268.     $cat <<'EOM'
  7269.   
  7270. In the following, larger digits indicate more significance.  A big-endian
  7271. machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
  7272. little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
  7273. machines may have weird orders like 3412.  A Cray will report 87654321. If
  7274. the test program works the default is probably right.
  7275. I'm now running the test program...
  7276. EOM
  7277.     $cat >try.c <<'EOCP'
  7278. #include <stdio.h>
  7279. main()
  7280. {
  7281.     int i;
  7282.     union {
  7283.         unsigned long l;
  7284.         char c[sizeof(long)];
  7285.     } u;
  7286.  
  7287.     if (sizeof(long) > 4)
  7288.         u.l = (0x08070605L << 32) | 0x04030201L;
  7289.     else
  7290.         u.l = 0x04030201L;
  7291.     for (i = 0; i < sizeof(long); i++)
  7292.         printf("%c", u.c[i]+'0');
  7293.     printf("\n");
  7294.     exit(0);
  7295. }
  7296. EOCP
  7297.     xxx_prompt=y
  7298.     if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
  7299.         dflt=`./try`
  7300.         case "$dflt" in
  7301.         [1-4][1-4][1-4][1-4]|12345678|87654321)
  7302.             echo "(The test program ran ok.)"
  7303.             echo "byteorder=$dflt"
  7304.             xxx_prompt=n
  7305.             ;;
  7306.         ????|????????) echo "(The test program ran ok.)" ;;
  7307.         *) echo "(The test program didn't run right for some reason.)" ;;
  7308.         esac
  7309.     else
  7310.         dflt='4321'
  7311.         cat <<'EOM'
  7312. (I can't seem to compile the test program.  Guessing big-endian...)
  7313. EOM
  7314.     fi
  7315.     case "$xxx_prompt" in
  7316.     y)
  7317.         rp="What is the order of bytes in a long?"
  7318.         . ./myread
  7319.         byteorder="$ans"
  7320.         ;;
  7321.     *)    byteorder=$dflt
  7322.         ;;
  7323.     esac
  7324.     ;;
  7325. esac
  7326. $rm -f try.c try
  7327.  
  7328. : how do we catenate cpp tokens here?
  7329. echo " "
  7330. echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
  7331. $cat >cpp_stuff.c <<'EOCP'
  7332. #define RCAT(a,b)a/**/b
  7333. #define ACAT(a,b)a ## b
  7334. RCAT(Rei,ser)
  7335. ACAT(Cir,cus)
  7336. EOCP
  7337. $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
  7338. if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
  7339.     echo "Oh!  Smells like ANSI's been here."
  7340.     echo "We can catify or stringify, separately or together!"
  7341.     cpp_stuff=42
  7342. elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
  7343.     echo "Ah, yes!  The good old days!"
  7344.     echo "However, in the good old days we don't know how to stringify and"
  7345.     echo "catify at the same time."
  7346.     cpp_stuff=1
  7347. else
  7348.     $cat >&4 <<EOM
  7349. Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
  7350. to have to edit the values of CAT[2-5] in config.h...
  7351. EOM
  7352.     cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
  7353. fi
  7354. $rm -f cpp_stuff.*
  7355.  
  7356. : see if this is a db.h system
  7357. set db.h i_db
  7358. eval $inhdr
  7359.  
  7360. case "$i_db" in
  7361. define)
  7362.     : Check the return type needed for hash 
  7363.     echo " "
  7364.     echo "Checking return type needed for hash for Berkeley DB ..." >&4
  7365.     $cat >try.c <<EOCP
  7366. #$d_const HASCONST
  7367. #ifndef HASCONST
  7368. #define const
  7369. #endif
  7370. #include <sys/types.h>
  7371. #include <db.h>
  7372. u_int32_t hash_cb (ptr, size)
  7373. const void *ptr;
  7374. size_t size;
  7375. {
  7376. }
  7377. HASHINFO info;
  7378. main()
  7379. {
  7380.     info.hash = hash_cb;
  7381. }
  7382. EOCP
  7383.     if $cc $ccflags -c try.c >try.out 2>&1 ; then
  7384.         if $contains warning try.out >>/dev/null 2>&1 ; then
  7385.             db_hashtype='int'
  7386.         else
  7387.             db_hashtype='u_int32_t'
  7388.         fi
  7389.     else
  7390.         echo "I can't seem to compile the test program." >&4
  7391.         db_hashtype=int
  7392.     fi
  7393.     $rm -f try.*
  7394.     echo "Your version of Berkeley DB uses $db_hashtype for hash."
  7395.     ;;
  7396. *)    db_hashtype=int
  7397.     ;;
  7398. esac
  7399.  
  7400. case "$i_db" in
  7401. define)
  7402.     : Check the return type needed for prefix 
  7403.     echo " "
  7404.     echo "Checking return type needed for prefix for Berkeley DB ..." >&4
  7405.     cat >try.c <<EOCP
  7406. #$d_const HASCONST
  7407. #ifndef HASCONST
  7408. #define const
  7409. #endif
  7410. #include <sys/types.h>
  7411. #include <db.h>
  7412. size_t prefix_cb (key1, key2)
  7413. const DBT *key1;
  7414. const DBT *key2;
  7415. {
  7416. }
  7417. BTREEINFO info;
  7418. main()
  7419. {
  7420.     info.prefix = prefix_cb;
  7421. }
  7422. EOCP
  7423.     if $cc $ccflags -c try.c  >try.out 2>&1 ; then
  7424.         if $contains warning try.out >>/dev/null 2>&1 ; then
  7425.             db_prefixtype='int'
  7426.         else
  7427.             db_prefixtype='size_t'
  7428.         fi
  7429.     else
  7430.         echo "I can't seem to compile the test program." >&4
  7431.         db_prefixtype='int'
  7432.     fi
  7433.     $rm -f try.*
  7434.     echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
  7435.     ;;
  7436. *)    db_prefixtype='int'
  7437.     ;;
  7438. esac
  7439.  
  7440. : check for void type
  7441. echo " "
  7442. echo "Checking to see how well your C compiler groks the void type..." >&4
  7443. echo " "
  7444. $cat >&4 <<EOM
  7445.   Support flag bits are:
  7446.     1: basic void declarations.
  7447.     2: arrays of pointers to functions returning void.
  7448.     4: operations between pointers to and addresses of void functions.
  7449.     8: generic void pointers.
  7450. EOM
  7451. echo " "
  7452. case "$voidflags" in
  7453. '')
  7454.     $cat >try.c <<'EOCP'
  7455. #if TRY & 1
  7456. void main() {
  7457. #else
  7458. main() {
  7459. #endif
  7460.     extern void moo();    /* function returning void */
  7461.     void (*goo)();        /* ptr to func returning void */
  7462. #if TRY & 8
  7463.     void *hue;        /* generic ptr */
  7464. #endif
  7465. #if TRY & 2
  7466.     void (*foo[10])();
  7467. #endif
  7468.  
  7469. #if TRY & 4
  7470.     if(goo == moo) {
  7471.         exit(0);
  7472.     }
  7473. #endif
  7474.     exit(0);
  7475. }
  7476. EOCP
  7477.     if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
  7478.         voidflags=$defvoidused
  7479.     echo "It appears to support void to the level $package wants ($defvoidused)."
  7480.         if $contains warning .out >/dev/null 2>&1; then
  7481.             echo "However, you might get some warnings that look like this:"
  7482.             $cat .out
  7483.         fi
  7484.     else
  7485. echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
  7486.         if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
  7487.             echo "It supports 1..."
  7488.             if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
  7489.                 echo "It also supports 2..."
  7490.                 if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then
  7491.                     voidflags=7
  7492.                     echo "And it supports 4 but not 8 definitely."
  7493.                 else
  7494.                     echo "It doesn't support 4..."
  7495.                     if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then
  7496.                         voidflags=11
  7497.                         echo "But it supports 8."
  7498.                     else
  7499.                         voidflags=3
  7500.                         echo "Neither does it support 8."
  7501.                     fi
  7502.                 fi
  7503.             else
  7504.                 echo "It does not support 2..."
  7505.                 if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then
  7506.                     voidflags=13
  7507.                     echo "But it supports 4 and 8."
  7508.                 else
  7509.                     if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then
  7510.                         voidflags=5
  7511.                         echo "And it supports 4 but has not heard about 8."
  7512.                     else
  7513.                         echo "However it supports 8 but not 4."
  7514.                     fi
  7515.                 fi
  7516.             fi
  7517.         else
  7518.             echo "There is no support at all for void."
  7519.             voidflags=0
  7520.         fi
  7521.     fi
  7522. esac
  7523. : Only prompt user if support does not match the level we want
  7524. case "$voidflags" in
  7525. "$defvoidused") ;;
  7526. *)
  7527.     dflt="$voidflags";
  7528.     rp="Your void support flags add up to what?"
  7529.     . ./myread
  7530.     voidflags="$ans"
  7531.     ;;
  7532. esac
  7533. $rm -f try.* .out
  7534.  
  7535. : see what type file positions are declared as in the library
  7536. set fpos_t fpostype long stdio.h sys/types.h
  7537. eval $typedef
  7538. echo " "
  7539. dflt="$fpostype"
  7540. rp="What is the type for file position used by fsetpos()?"
  7541. . ./myread
  7542. fpostype="$ans"
  7543.  
  7544. : Store the full pathname to the sed program for use in the C program
  7545. full_sed=$sed
  7546.  
  7547. : see what type gids are declared as in the kernel
  7548. set gid_t gidtype xxx stdio.h sys/types.h
  7549. eval $typedef
  7550. case "$gidtype" in
  7551. xxx)
  7552.     xxx=`./findhdr sys/user.h`
  7553.     set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
  7554.     case $1 in
  7555.     unsigned) dflt="$1 $2" ;;
  7556.     *) dflt="$1" ;;
  7557.     esac
  7558.     ;;
  7559. *) dflt="$gidtype";;
  7560. esac
  7561. echo " "
  7562. rp="What is the type for group ids returned by getgid()?"
  7563. . ./myread
  7564. gidtype="$ans"
  7565.  
  7566. : see if getgroups exists
  7567. set getgroups d_getgrps
  7568. eval $inlibc
  7569.  
  7570. : Find type of 2nd arg to getgroups
  7571. echo " "
  7572. case "$d_getgrps" in
  7573. 'define')
  7574.     case "$groupstype" in
  7575.     '') dflt="$gidtype" ;;
  7576.     *)  dflt="$groupstype" ;;
  7577.     esac
  7578.     $cat <<EOM
  7579. What is the type of the second argument to getgroups()?  Usually this
  7580. is the same as group ids, $gidtype, but not always.
  7581.  
  7582. EOM
  7583.     rp='What type is the second argument to getgroups()?'
  7584.     . ./myread
  7585.     groupstype="$ans"
  7586.     ;;
  7587. *)  groupstype="$gidtype";;
  7588. esac
  7589.  
  7590. : see what type lseek is declared as in the kernel
  7591. set off_t lseektype long stdio.h sys/types.h
  7592. eval $typedef
  7593. echo " "
  7594. dflt="$lseektype"
  7595. rp="What type is lseek's offset on this system declared as?"
  7596. . ./myread
  7597. lseektype="$ans"
  7598.  
  7599. : see what type is used for mode_t
  7600. set mode_t modetype int stdio.h sys/types.h
  7601. eval $typedef
  7602. dflt="$modetype"
  7603. echo " "
  7604. rp="What type is used for file modes?"
  7605. . ./myread
  7606. modetype="$ans"
  7607.  
  7608. : locate the preferred pager for this system
  7609. case "$pager" in
  7610. '')
  7611.     dflt=''
  7612.     case "$pg" in
  7613.     /*) dflt=$pg;;
  7614.     esac
  7615.     case "$more" in
  7616.     /*) dflt=$more;;
  7617.     esac
  7618.     case "$less" in
  7619.     /*) dflt=$less;;
  7620.     esac
  7621.     case "$dflt" in
  7622.     '') dflt=/usr/ucb/more;;
  7623.     esac
  7624.     ;;
  7625. *) dflt="$pager";;
  7626. esac
  7627. echo " "
  7628. fn=f/
  7629. rp='What pager is used on your system?'
  7630. . ./getfile
  7631. pager="$ans"
  7632.  
  7633. : Cruising for prototypes
  7634. echo " "
  7635. echo "Checking out function prototypes..." >&4
  7636. $cat >prototype.c <<'EOCP'
  7637. main(int argc, char *argv[]) {
  7638.     exit(0);}
  7639. EOCP
  7640. if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
  7641.     echo "Your C compiler appears to support function prototypes."
  7642.     val="$define"
  7643. else
  7644.     echo "Your C compiler doesn't seem to understand function prototypes."
  7645.     val="$undef"
  7646. fi
  7647. set prototype
  7648. eval $setvar
  7649. $rm -f prototype*
  7650.  
  7651. : check for size of random number generator
  7652. echo " "
  7653. case "$randbits" in
  7654. '')
  7655.     echo "Checking to see how many bits your rand function produces..." >&4
  7656.     $cat >try.c <<'EOCP'
  7657. #include <stdio.h>
  7658. main()
  7659. {
  7660.     register int i;
  7661.     register unsigned long tmp;
  7662.     register unsigned long max = 0L;
  7663.  
  7664.     for (i = 1000; i; i--) {
  7665.         tmp = (unsigned long)rand();
  7666.         if (tmp > max) max = tmp;
  7667.     }
  7668.     for (i = 0; max; i++)
  7669.         max /= 2;
  7670.     printf("%d\n",i);
  7671. }
  7672. EOCP
  7673.     if $cc try.c -o try >/dev/null 2>&1 ; then
  7674.         dflt=`try`
  7675.     else
  7676.         dflt='?'
  7677.         echo "(I can't seem to compile the test program...)"
  7678.     fi
  7679.     ;;
  7680. *)
  7681.     dflt="$randbits"
  7682.     ;;
  7683. esac
  7684. rp='How many bits does your rand() function produce?'
  7685. . ./myread
  7686. randbits="$ans"
  7687. $rm -f try.c try
  7688.  
  7689. : see if ar generates random libraries by itself
  7690. echo " "
  7691. echo "Checking how to generate random libraries on your machine..." >&4
  7692. echo 'int bar1() { return bar2(); }' > bar1.c
  7693. echo 'int bar2() { return 2; }' > bar2.c
  7694. $cat > foo.c <<'EOP'
  7695. main() { printf("%d\n", bar1()); exit(0); }
  7696. EOP
  7697. $cc $ccflags -c bar1.c >/dev/null 2>&1
  7698. $cc $ccflags -c bar2.c >/dev/null 2>&1
  7699. $cc $ccflags -c foo.c >/dev/null 2>&1
  7700. ar rc bar.a bar2.o bar1.o >/dev/null 2>&1
  7701. if $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
  7702.     ./foobar >/dev/null 2>&1; then
  7703.     echo "ar appears to generate random libraries itself."
  7704.     orderlib=false
  7705.     ranlib=":"
  7706. elif ar ts bar.a >/dev/null 2>&1 &&
  7707.     $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 &&
  7708.     ./foobar >/dev/null 2>&1; then
  7709.         echo "a table of contents needs to be added with 'ar ts'."
  7710.         orderlib=false
  7711.         ranlib="ar ts"
  7712. else
  7713.     case "$ranlib" in
  7714.     :) ranlib='';;
  7715.     '')
  7716.         ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
  7717.         $test -f $ranlib || ranlib=''
  7718.         ;;
  7719.     esac
  7720.     if $test -n "$ranlib"; then
  7721.         echo "your system has '$ranlib'; we'll use that."
  7722.         orderlib=false
  7723.     else
  7724.         echo "your system doesn't seem to support random libraries"
  7725.         echo "so we'll use lorder and tsort to order the libraries."
  7726.         orderlib=true
  7727.         ranlib=":"
  7728.     fi
  7729. fi
  7730. $rm -f foo* bar* 
  7731.  
  7732. : see if sys/select.h has to be included
  7733. set sys/select.h i_sysselct
  7734. eval $inhdr
  7735.  
  7736. : see if we should include time.h, sys/time.h, or both
  7737. echo " "
  7738. echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
  7739. $echo $n "I'm now running the test program...$c"
  7740. $cat >try.c <<'EOCP'
  7741. #include <sys/types.h>
  7742. #ifdef I_TIME
  7743. #include <time.h>
  7744. #endif
  7745. #ifdef I_SYSTIME
  7746. #ifdef SYSTIMEKERNEL
  7747. #define KERNEL
  7748. #endif
  7749. #include <sys/time.h>
  7750. #endif
  7751. #ifdef I_SYSSELECT
  7752. #include <sys/select.h>
  7753. #endif
  7754. main()
  7755. {
  7756.     struct tm foo;
  7757. #ifdef S_TIMEVAL
  7758.     struct timeval bar;
  7759. #endif
  7760. #ifdef S_TIMEZONE
  7761.     struct timezone tzp;
  7762. #endif
  7763.     if (foo.tm_sec == foo.tm_sec)
  7764.         exit(0);
  7765. #ifdef S_TIMEVAL
  7766.     if (bar.tv_sec == bar.tv_sec)
  7767.         exit(0);
  7768. #endif
  7769.     exit(1);
  7770. }
  7771. EOCP
  7772. flags=''
  7773. for s_timezone in '-DS_TIMEZONE' ''; do
  7774. sysselect=''
  7775. for s_timeval in '-DS_TIMEVAL' ''; do
  7776. for i_systimek in '' '-DSYSTIMEKERNEL'; do
  7777. for i_time in '' '-DI_TIME'; do
  7778. for i_systime in '-DI_SYSTIME' ''; do
  7779.     case "$flags" in
  7780.     '') $echo $n ".$c"
  7781.         if $cc $ccflags \
  7782.         $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
  7783.         try.c -o try >/dev/null 2>&1 ; then
  7784.             set X $i_time $i_systime $i_systimek $sysselect $s_timeval
  7785.             shift
  7786.             flags="$*"
  7787.             echo " "
  7788.             $echo $n "Succeeded with $flags$c"
  7789.         fi
  7790.         ;;
  7791.     esac
  7792. done
  7793. done
  7794. done
  7795. done
  7796. done
  7797. timeincl=''
  7798. echo " "
  7799. case "$flags" in
  7800. *SYSTIMEKERNEL*) i_systimek="$define"
  7801.     timeincl=`./findhdr sys/time.h`
  7802.     echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
  7803. *) i_systimek="$undef";;
  7804. esac
  7805. case "$flags" in
  7806. *I_TIME*) i_time="$define"
  7807.     timeincl=`./findhdr time.h`" $timeincl"
  7808.     echo "We'll include <time.h>." >&4;;
  7809. *) i_time="$undef";;
  7810. esac
  7811. case "$flags" in
  7812. *I_SYSTIME*) i_systime="$define"
  7813.     timeincl=`./findhdr sys/time.h`" $timeincl"
  7814.     echo "We'll include <sys/time.h>." >&4;;
  7815. *) i_systime="$undef";;
  7816. esac
  7817. $rm -f try.c try
  7818.  
  7819. : check for fd_set items
  7820. $cat <<EOM
  7821.  
  7822. Checking to see how well your C compiler handles fd_set and friends ...
  7823. EOM
  7824. $cat >fd_set.c <<EOCP
  7825. #$i_systime I_SYS_TIME
  7826. #$i_sysselct I_SYS_SELECT
  7827. #$d_socket HAS_SOCKET
  7828. #include <sys/types.h>
  7829. #ifdef HAS_SOCKET
  7830. #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
  7831. #endif
  7832. #ifdef I_SYS_TIME
  7833. #include <sys/time.h>
  7834. #else
  7835. #ifdef I_SYS_SELECT
  7836. #include <sys/select.h>
  7837. #endif
  7838. #endif
  7839. main() {
  7840.     fd_set fds;
  7841.  
  7842. #ifdef TRYBITS
  7843.     if(fds.fds_bits);
  7844. #endif
  7845.  
  7846. #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
  7847.     exit(0);
  7848. #else
  7849.     exit(1);
  7850. #endif
  7851. }
  7852. EOCP
  7853. if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then
  7854.     d_fds_bits="$define"
  7855.     d_fd_set="$define"
  7856.     echo "Well, your system knows about the normal fd_set typedef..." >&4
  7857.     if ./fd_set; then
  7858.         echo "and you have the normal fd_set macros (just as I'd expect)." >&4
  7859.         d_fd_macros="$define"
  7860.     else
  7861.         $cat >&4 <<'EOM'
  7862. but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
  7863. EOM
  7864.         d_fd_macros="$undef"
  7865.     fi
  7866. else
  7867.     $cat <<'EOM'
  7868. Hmm, your compiler has some difficulty with fd_set.  Checking further...
  7869. EOM
  7870.     if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then
  7871.         d_fds_bits="$undef"
  7872.         d_fd_set="$define"
  7873.         echo "Well, your system has some sort of fd_set available..." >&4
  7874.         if ./fd_set; then
  7875.             echo "and you have the normal fd_set macros." >&4
  7876.             d_fd_macros="$define"
  7877.         else
  7878.             $cat <<'EOM'
  7879. but not the normal fd_set macros!  Gross!  More work for me...
  7880. EOM
  7881.             d_fd_macros="$undef"
  7882.         fi
  7883.     else
  7884.     echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
  7885.         d_fd_set="$undef"
  7886.         d_fds_bits="$undef"
  7887.         d_fd_macros="$undef"
  7888.     fi
  7889. fi
  7890. $rm -f fd_set*
  7891.  
  7892.  
  7893. : check for type of arguments to select.  This will only really
  7894. : work if the system supports prototypes and provides one for
  7895. : select.
  7896. case "$d_select" in
  7897. $define)
  7898.     : Make initial guess
  7899.     case "$selecttype" in
  7900.     ''|' ')
  7901.         case "$d_fd_set" in
  7902.         $define) xxx='fd_set *' ;;
  7903.         *) xxx='int *' ;;
  7904.         esac
  7905.         ;;
  7906.     *)     xxx="$selecttype" 
  7907.         ;;
  7908.     esac
  7909.     : backup guess
  7910.     case "$xxx" in
  7911.     'fd_set *') yyy='int *' ;;
  7912.     'int *') yyy='fd_set *' ;;
  7913.     esac
  7914.  
  7915.     $cat <<EOM
  7916.  
  7917. Checking to see what type of arguments are expected by select().
  7918. EOM
  7919.     $cat >try.c <<EOCP
  7920. #$i_systime I_SYS_TIME
  7921. #$i_sysselct I_SYS_SELECT
  7922. #$d_socket HAS_SOCKET
  7923. #include <sys/types.h>
  7924. #ifdef HAS_SOCKET
  7925. #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
  7926. #endif
  7927. #ifdef I_SYS_TIME
  7928. #include <sys/time.h>
  7929. #else
  7930. #ifdef I_SYS_SELECT
  7931. #include <sys/select.h>
  7932. #endif
  7933. #endif
  7934. main()
  7935. {
  7936.     int width;
  7937.     Select_fd_set_t readfds;
  7938.     Select_fd_set_t writefds;
  7939.     Select_fd_set_t exceptfds;
  7940.     struct timeval timeout;
  7941.     select(width, readfds, writefds, exceptfds, &timeout);
  7942.     exit(0);
  7943. }
  7944. EOCP
  7945.     if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
  7946.         selecttype="$xxx"
  7947.         echo "Your system uses $xxx for the arguments to select." >&4
  7948.     elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
  7949.         selecttype="$yyy"
  7950.         echo "Your system uses $yyy for the arguments to select." >&4
  7951.     else
  7952.         rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
  7953.         dflt="$xxx"
  7954.         . ./myread
  7955.         selecttype="$ans"
  7956.     fi
  7957.     $rm -f try.[co]
  7958.     ;;
  7959. *)    selecttype='int *'
  7960.     ;;
  7961. esac
  7962.  
  7963. : Trace out the files included by signal.h, then look for SIGxxx names.
  7964. : Remove SIGARRAYSIZE used by HPUX.
  7965. : Remove SIGTYP void lines used by OS2.
  7966. xxx=`echo '#include <signal.h>' |
  7967.     $cppstdin $cppminus $cppflags 2>/dev/null |
  7968.     $grep '^[     ]*#.*include' | 
  7969.     $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
  7970. : Check this list of files to be sure we have parsed the cpp output ok.
  7971. : This will also avoid potentially non-existent files, such 
  7972. : as ../foo/bar.h
  7973. xxxfiles=''
  7974. for xx in $xxx /dev/null ; do
  7975.     $test -f "$xx" && xxxfiles="$xxxfiles $xx"
  7976. done
  7977. : If we have found no files, at least try signal.h
  7978. case "$xxxfiles" in
  7979. '')    xxxfiles=`./findhdr signal.h` ;;
  7980. esac
  7981. xxx=`awk '
  7982. $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
  7983.     print substr($2, 4, 20)
  7984. }
  7985. $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
  7986.     print substr($3, 4, 20)
  7987. }' $xxxfiles`
  7988. : Append some common names just in case the awk scan failed.
  7989. xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
  7990. xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
  7991. xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
  7992. xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
  7993. : generate a few handy files for later
  7994. $cat > signal.c <<'EOP'
  7995. #include <sys/types.h>
  7996. #include <signal.h>
  7997. int main() {
  7998. #ifdef NSIG
  7999. printf("NSIG %d\n", NSIG);
  8000. #else
  8001. #ifdef _NSIG
  8002. printf("NSIG %d\n", _NSIG);
  8003. #endif
  8004. #endif
  8005. EOP
  8006. echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk '
  8007. {
  8008.     printf "#ifdef SIG"; printf $1; printf "\n"
  8009.     printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
  8010.     printf $1; printf ");\n"
  8011.     printf "#endif\n"
  8012. }
  8013. END {
  8014.     printf "}\n";
  8015. }
  8016. ' >>signal.c
  8017. $cat >signal.awk <<'EOP'
  8018. BEGIN { ndups = 0 }
  8019. $1 ~ /^NSIG$/ { nsig = $2 }
  8020. ($1 !~ /^NSIG$/) && (NF == 2) {
  8021.     if ($2 > maxsig) { maxsig = $2 }
  8022.     if (sig_name[$2]) {
  8023.     dup_name[ndups] = $1
  8024.     dup_num[ndups] = $2
  8025.     ndups++ 
  8026.     }
  8027.     else {
  8028.     sig_name[$2] = $1
  8029.     sig_num[$2] = $2
  8030.     }
  8031.  
  8032. }
  8033. END { 
  8034.     if (nsig == 0) { nsig = maxsig + 1 }
  8035.     for (n = 1; n < nsig; n++) {
  8036.         if (sig_name[n]) {
  8037.             printf("%s %d\n", sig_name[n], sig_num[n])
  8038.         }
  8039.         else {
  8040.             printf("NUM%d %d\n", n, n) 
  8041.         }
  8042.     }
  8043.     for (n = 0; n < ndups; n++) {
  8044.         printf("%s %d\n", dup_name[n], dup_num[n])
  8045.     }
  8046. }
  8047. EOP
  8048. $cat >signal_cmd <<EOS
  8049. $startsh
  8050. $test -s signal.lst && exit 0
  8051. if $cc $ccflags signal.c -o signal $ldflags >/dev/null 2>&1; then
  8052.     ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
  8053. else
  8054.     echo "(I can't seem be able to compile the test program -- Guessing)"
  8055.     echo 'kill -l' >signal
  8056.     set X \`csh -f <signal\`
  8057.     $rm -f signal
  8058.     shift
  8059.     case \$# in
  8060.     0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
  8061.     esac
  8062.     echo \$@ | $tr ' ' '\012' | \
  8063.         $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
  8064. fi
  8065. $rm -f signal.c signal signal.o
  8066. EOS
  8067. chmod a+x signal_cmd
  8068. $eunicefix signal_cmd
  8069.  
  8070. : generate list of signal names
  8071. echo " "
  8072. case "$sig_name" in
  8073. '')    sig_num='' ;;
  8074. esac
  8075. case "$sig_num" in
  8076. '')    sig_name='' ;;
  8077. esac
  8078. case "$sig_name" in
  8079. '')
  8080.     echo "Generating a list of signal names and numbers..." >&4
  8081.     ./signal_cmd
  8082.     sig_name=`$awk '{printf "%s ", $1}' signal.lst`
  8083.     sig_name="ZERO $sig_name"
  8084.     sig_num=`$awk '{printf "%d ", $2}' signal.lst`
  8085.     sig_num="0 $sig_num"
  8086.     ;;
  8087. esac
  8088. echo "The following signals are available:"
  8089. echo " "
  8090. echo $sig_name | $awk \
  8091. 'BEGIN { linelen = 0 }
  8092. {
  8093.     for (i = 1; i <= NF; i++) {
  8094.         name = "SIG" $i " "
  8095.         linelen = linelen + length(name)
  8096.         if (linelen > 70) {
  8097.             printf "\n"
  8098.             linelen = length(name)
  8099.         }
  8100.         printf "%s", name
  8101.     }
  8102.     printf "\n"
  8103. }'
  8104. $rm -f signal signal.c signal.awk signal.lst signal_cmd 
  8105.  
  8106. : see what type is used for size_t
  8107. set size_t sizetype 'unsigned int' stdio.h sys/types.h
  8108. eval $typedef
  8109. dflt="$sizetype"
  8110. echo " "
  8111. rp="What type is used for the length parameter for string functions?"
  8112. . ./myread
  8113. sizetype="$ans"
  8114.  
  8115. : see what type is used for signed size_t
  8116. set ssize_t ssizetype int stdio.h sys/types.h
  8117. eval $typedef
  8118. dflt="$ssizetype"
  8119. $cat > ssize.c <<EOM
  8120. #include <stdio.h>
  8121. #include <sys/types.h>
  8122. #define Size_t $sizetype
  8123. #define SSize_t $dflt
  8124. main()
  8125. {
  8126.     if (sizeof(Size_t) == sizeof(SSize_t))
  8127.         printf("$dflt\n");
  8128.     else if (sizeof(Size_t) == sizeof(int))
  8129.         printf("int\n");
  8130.     else 
  8131.         printf("long\n");
  8132. }
  8133. EOM
  8134. echo " "
  8135. if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 ; then
  8136.     ssizetype=`./ssize`
  8137.     echo "I'll be using $ssizetype for functions returning a byte count." >&4
  8138. else
  8139.     echo "(I can't compile the test program--please enlighten me!)"
  8140.     $cat <<EOM
  8141.  
  8142. I need a type that is the same size as $sizetype, but is guaranteed to
  8143. be signed.  Common values are int and long.
  8144.  
  8145. EOM
  8146.     rp="What signed type is the same size as $sizetype?"
  8147.     . ./myread
  8148.     ssizetype="$ans"
  8149. fi
  8150. $rm -f ssize ssize.[co]
  8151.  
  8152. : see what type of char stdio uses.
  8153. echo " "
  8154. if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
  8155.     echo "Your stdio uses unsigned chars." >&4
  8156.     stdchar="unsigned char"
  8157. else
  8158.     echo "Your stdio uses signed chars." >&4
  8159.     stdchar="char"
  8160. fi
  8161.  
  8162. : see if time exists
  8163. echo " "
  8164. if set time val -f d_time; eval $csym; $val; then
  8165.     echo 'time() found.' >&4
  8166.     val="$define"
  8167.     set time_t timetype long stdio.h sys/types.h
  8168.     eval $typedef
  8169.     dflt="$timetype"
  8170.     echo " "
  8171.     rp="What type is returned by time() on this system?"
  8172.     . ./myread
  8173.     timetype="$ans"
  8174. else
  8175.     echo 'time() not found, hope that will do.' >&4
  8176.     val="$undef"
  8177.     timetype='int';
  8178. fi
  8179. set d_time
  8180. eval $setvar
  8181.  
  8182. : see what type uids are declared as in the kernel
  8183. set uid_t uidtype xxx stdio.h sys/types.h
  8184. eval $typedef
  8185. case "$uidtype" in
  8186. xxx)
  8187.     xxx=`./findhdr sys/user.h`
  8188.     set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
  8189.     case $1 in
  8190.     unsigned) dflt="$1 $2" ;;
  8191.     *) dflt="$1" ;;
  8192.     esac
  8193.     ;;
  8194. *) dflt="$uidtype";;
  8195. esac
  8196. echo " "
  8197. rp="What is the type for user ids returned by getuid()?"
  8198. . ./myread
  8199. uidtype="$ans"
  8200.  
  8201. : see if dbm.h is available
  8202. : see if dbmclose exists
  8203. set dbmclose d_dbmclose
  8204. eval $inlibc
  8205.  
  8206. case "$d_dbmclose" in
  8207. $define)
  8208.     set dbm.h i_dbm
  8209.     eval $inhdr
  8210.     case "$i_dbm" in
  8211.     $define)
  8212.         val="$undef"
  8213.         set i_rpcsvcdbm
  8214.         eval $setvar
  8215.         ;;
  8216.     *)    set rpcsvc/dbm.h i_rpcsvcdbm
  8217.         eval $inhdr
  8218.         ;;
  8219.     esac
  8220.     ;;
  8221. *)    echo "We won't be including <dbm.h>"
  8222.     val="$undef"
  8223.     set i_dbm
  8224.     eval $setvar
  8225.     val="$undef"
  8226.     set i_rpcsvcdbm
  8227.     eval $setvar
  8228.     ;;
  8229. esac
  8230.  
  8231. : see if this is a sys/file.h system
  8232. val=''
  8233. set sys/file.h val
  8234. eval $inhdr
  8235.  
  8236. : do we need to include sys/file.h ?
  8237. case "$val" in
  8238. "$define")
  8239.     echo " "
  8240.     if $h_sysfile; then
  8241.         val="$define"
  8242.         echo "We'll be including <sys/file.h>." >&4
  8243.     else
  8244.         val="$undef"
  8245.         echo "We won't be including <sys/file.h>." >&4
  8246.     fi
  8247.     ;;
  8248. *)
  8249.     h_sysfile=false
  8250.     ;;
  8251. esac
  8252. set i_sysfile
  8253. eval $setvar
  8254.  
  8255. : see if fcntl.h is there
  8256. val=''
  8257. set fcntl.h val
  8258. eval $inhdr
  8259.  
  8260. : see if we can include fcntl.h
  8261. case "$val" in
  8262. "$define")
  8263.     echo " "
  8264.     if $h_fcntl; then
  8265.         val="$define"
  8266.         echo "We'll be including <fcntl.h>." >&4
  8267.     else
  8268.         val="$undef"
  8269.         if $h_sysfile; then
  8270.     echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
  8271.         else
  8272.             echo "We won't be including <fcntl.h>." >&4
  8273.         fi
  8274.     fi
  8275.     ;;
  8276. *)
  8277.     h_fcntl=false
  8278.     val="$undef"
  8279.     ;;
  8280. esac
  8281. set i_fcntl
  8282. eval $setvar
  8283.  
  8284. : see if this is an grp system
  8285. set grp.h i_grp
  8286. eval $inhdr
  8287.  
  8288. : see if locale.h is available
  8289. set locale.h i_locale
  8290. eval $inhdr
  8291.  
  8292. : see if this is a math.h system
  8293. set math.h i_math
  8294. eval $inhdr
  8295.  
  8296. : see if memory.h is available.
  8297. val=''
  8298. set memory.h val
  8299. eval $inhdr
  8300.  
  8301. : See if it conflicts with string.h
  8302. case "$val" in
  8303. $define)
  8304.     case "$strings" in
  8305.     '') ;;
  8306.     *)
  8307.         $cppstdin $cppflags $cppminus < $strings > mem.h
  8308.         if $contains 'memcpy' mem.h >/dev/null 2>&1; then
  8309.             echo " "
  8310.             echo "We won't be including <memory.h>."
  8311.             val="$undef"
  8312.         fi
  8313.         $rm -f mem.h
  8314.         ;;
  8315.     esac
  8316. esac
  8317. set i_memory
  8318. eval $setvar
  8319.  
  8320. : see if ndbm.h is available
  8321. set ndbm.h t_ndbm
  8322. eval $inhdr
  8323. case "$t_ndbm" in
  8324. $define)
  8325.     : see if dbm_open exists
  8326.     set dbm_open d_dbm_open
  8327.     eval $inlibc
  8328.     case "$d_dbm_open" in
  8329.     $undef)
  8330.         t_ndbm="$undef"
  8331.         echo "We won't be including <ndbm.h>"
  8332.         ;;
  8333.     esac
  8334.     ;;
  8335. esac
  8336. val="$t_ndbm"
  8337. set i_ndbm
  8338. eval $setvar
  8339.  
  8340. : see if net/errno.h is available
  8341. val=''
  8342. set net/errno.h val
  8343. eval $inhdr
  8344.  
  8345. : Unfortunately, it causes problems on some systems.  Arrgh.
  8346. case "$val" in
  8347. $define)
  8348.     cat > try.c <<'EOM'
  8349. #include <stdio.h>
  8350. #include <errno.h>
  8351. #include <net/errno.h>
  8352. int func()
  8353. {
  8354.     return ENOTSOCK;
  8355. }
  8356. EOM
  8357.     if $cc $ccflags -c try.c >/dev/null 2>&1; then
  8358.         echo "We'll be including <net/errno.h>." >&4
  8359.     else
  8360.         echo "We won't be including <net/errno.h>." >&4
  8361.         val="$undef"
  8362.     fi
  8363.     $rm -f try.* try
  8364.     ;;
  8365. esac
  8366. set i_neterrno
  8367. eval $setvar
  8368.  
  8369. : get C preprocessor symbols handy
  8370. echo " "
  8371. $echo $n "Hmm... $c"
  8372. echo $al | $tr ' ' '\012' >Cppsym.know
  8373. $cat <<EOSS >Cppsym
  8374. $startsh
  8375. case "\$1" in
  8376. -l) list=true
  8377.     shift
  8378.     ;;
  8379. esac
  8380. unknown=''
  8381. case "\$list\$#" in
  8382. 1|2)
  8383.     for sym do
  8384.         if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
  8385.             exit 0
  8386.         elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
  8387.             :
  8388.         else
  8389.             unknown="\$unknown \$sym"
  8390.         fi
  8391.     done
  8392.     set X \$unknown
  8393.     shift
  8394.     ;;
  8395. esac
  8396. case \$# in
  8397. 0) exit 1;;
  8398. esac
  8399. echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
  8400. #ifdef \1\\
  8401. exit 0; _ _ _ _\1\\     \1\\
  8402. #endif\\
  8403. /' >Cppsym\$\$
  8404. echo "exit 1; _ _ _" >>Cppsym\$\$
  8405. $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
  8406. case "\$list" in
  8407. true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
  8408. *)
  8409.     sh Cppsym2\$\$
  8410.     status=\$?
  8411.     ;;
  8412. esac
  8413. $rm -f Cppsym\$\$ Cppsym2\$\$
  8414. exit \$status
  8415. EOSS
  8416. chmod +x Cppsym
  8417. $eunicefix Cppsym
  8418. ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
  8419.  
  8420. : now check the C compiler for additional symbols
  8421. $cat >ccsym <<EOS
  8422. $startsh
  8423. $cat >tmp.c <<EOF
  8424. extern int foo;
  8425. EOF
  8426. for i in \`$cc -v -c tmp.c 2>&1\`
  8427. do
  8428.     case "\$i" in
  8429.     -D*) echo "\$i" | $sed 's/^-D//';;
  8430.     -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
  8431.     esac
  8432. done
  8433. $rm -f try.c
  8434. EOS
  8435. chmod +x ccsym
  8436. $eunicefix ccsym
  8437. ./ccsym | $sort | $uniq >ccsym.raw
  8438. $awk '/\=/ { print $0; next }
  8439.     { print $0"=1" }' ccsym.raw >ccsym.list
  8440. $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
  8441. $comm -13 ccsym.true ccsym.list >ccsym.own
  8442. $comm -12 ccsym.true ccsym.list >ccsym.com
  8443. $comm -23 ccsym.true ccsym.list >ccsym.cpp
  8444. also=''
  8445. symbols='symbols'
  8446. if $test -z ccsym.raw; then
  8447.     echo "Your C compiler doesn't seem to define any symbol!" >&4
  8448.     echo " "
  8449.     echo "However, your C preprocessor defines the following ones:"
  8450.     $cat Cppsym.true
  8451. else
  8452.     if $test -s ccsym.com; then
  8453.         echo "Your C compiler and pre-processor define these symbols:"
  8454.         $sed -e 's/\(.*\)=.*/\1/' ccsym.com
  8455.         also='also '
  8456.         symbols='ones'
  8457.         $test "$silent" || sleep 1
  8458.     fi
  8459.     if $test -s ccsym.cpp; then
  8460.         $test "$also" && echo " "
  8461.         echo "Your C pre-processor ${also}defines the following $symbols:"
  8462.         $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
  8463.         also='further '
  8464.         $test "$silent" || sleep 1
  8465.     fi
  8466.     if $test -s ccsym.own; then
  8467.         $test "$also" && echo " "
  8468.         echo "Your C compiler ${also}defines the following cpp variables:"
  8469.         $sed -e 's/\(.*\)=1/\1/' ccsym.own
  8470.         $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
  8471.         $test "$silent" || sleep 1
  8472.     fi
  8473. fi
  8474. $rm -f ccsym*
  8475.  
  8476. : see if this is a termio system
  8477. val="$undef"
  8478. val2="$undef"
  8479. val3="$undef"
  8480. if $test `./findhdr termios.h`; then
  8481.     set tcsetattr i_termios
  8482.     eval $inlibc
  8483.     val3="$i_termios"
  8484. fi
  8485. echo " "
  8486. case "$val3" in
  8487. "$define") echo "You have POSIX termios.h... good!" >&4;;
  8488. *) if ./Cppsym pyr; then
  8489.         case "`/bin/universe`" in
  8490.         ucb) if $test `./findhdr sgtty.h`; then
  8491.                 val2="$define"
  8492.                 echo "<sgtty.h> found." >&4
  8493.             else
  8494.                 echo "System is pyramid with BSD universe."
  8495.                 echo "<sgtty.h> not found--you could have problems." >&4
  8496.             fi;;
  8497.         *) if $test `./findhdr termio.h`; then
  8498.                 val="$define"
  8499.                 echo "<termio.h> found." >&4
  8500.             else
  8501.                 echo "System is pyramid with USG universe."
  8502.                 echo "<termio.h> not found--you could have problems." >&4
  8503.             fi;;
  8504.         esac
  8505.     elif ./usg; then
  8506.         if $test `./findhdr termio.h`; then
  8507.             echo "<termio.h> found." >&4
  8508.             val="$define"
  8509.         elif $test `./findhdr sgtty.h`; then
  8510.             echo "<sgtty.h> found." >&4
  8511.             val2="$define"
  8512.         else
  8513. echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
  8514.         fi
  8515.     else
  8516.         if $test `./findhdr sgtty.h`; then
  8517.             echo "<sgtty.h> found." >&4
  8518.             val2="$define"
  8519.         elif $test `./findhdr termio.h`; then
  8520.             echo "<termio.h> found." >&4
  8521.             val="$define"
  8522.         else
  8523. echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
  8524.         fi
  8525.     fi;;
  8526. esac
  8527. set i_termio; eval $setvar
  8528. val=$val2; set i_sgtty; eval $setvar
  8529. val=$val3; set i_termios; eval $setvar
  8530.  
  8531. : see if stdarg is available
  8532. echo " "
  8533. if $test `./findhdr stdarg.h`; then
  8534.     echo "<stdarg.h> found." >&4
  8535.     valstd="$define"
  8536. else
  8537.     echo "<stdarg.h> NOT found." >&4
  8538.     valstd="$undef"
  8539. fi
  8540.  
  8541. : see if varags is available
  8542. echo " "
  8543. if $test `./findhdr varargs.h`; then
  8544.     echo "<varargs.h> found." >&4
  8545. else
  8546.     echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
  8547. fi
  8548.  
  8549. : set up the varargs testing programs
  8550. $cat > varargs.c <<EOP
  8551. #ifdef I_STDARG
  8552. #include <stdarg.h>
  8553. #endif
  8554. #ifdef I_VARARGS
  8555. #include <varargs.h>
  8556. #endif
  8557.  
  8558. #ifdef I_STDARG
  8559. int f(char *p, ...)
  8560. #else
  8561. int f(va_alist)
  8562. va_dcl
  8563. #endif
  8564. {
  8565.     va_list ap;
  8566. #ifndef I_STDARG
  8567.     char *p;
  8568. #endif
  8569. #ifdef I_STDARG
  8570.     va_start(ap,p);
  8571. #else
  8572.     va_start(ap);
  8573.     p = va_arg(ap, char *);
  8574. #endif
  8575.     va_end(ap);
  8576. }
  8577. EOP
  8578. $cat > varargs <<EOP
  8579. $startsh
  8580. if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
  8581.     echo "true"
  8582. else
  8583.     echo "false"
  8584. fi
  8585. $rm -f varargs.o
  8586. EOP
  8587. chmod +x varargs
  8588.  
  8589. : now check which varargs header should be included
  8590. echo " "
  8591. i_varhdr=''
  8592. case "$valstd" in
  8593. "$define")
  8594.     if `./varargs I_STDARG`; then
  8595.         val='stdarg.h'
  8596.     elif `./varargs I_VARARGS`; then
  8597.         val='varargs.h'
  8598.     fi
  8599.     ;;
  8600. *)
  8601.     if `./varargs I_VARARGS`; then
  8602.         val='varargs.h'
  8603.     fi
  8604.     ;;
  8605. esac
  8606. case "$val" in
  8607. '')
  8608. echo "I could not find the definition for va_dcl... You have problems..." >&4
  8609.     val="$undef"; set i_stdarg; eval $setvar
  8610.     val="$undef"; set i_varargs; eval $setvar
  8611.     ;;
  8612. *) 
  8613.     set i_varhdr
  8614.     eval $setvar
  8615.     case "$i_varhdr" in
  8616.     stdarg.h)
  8617.         val="$define"; set i_stdarg; eval $setvar
  8618.         val="$undef"; set i_varargs; eval $setvar
  8619.         ;;
  8620.     varargs.h)
  8621.         val="$undef"; set i_stdarg; eval $setvar
  8622.         val="$define"; set i_varargs; eval $setvar
  8623.         ;;
  8624.     esac
  8625.     echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
  8626. esac
  8627. $rm -f varargs*
  8628.  
  8629. : see if stddef is available
  8630. set stddef.h i_stddef
  8631. eval $inhdr
  8632.  
  8633. : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
  8634. set sys/filio.h i_sysfilio
  8635. eval $inhdr
  8636. echo " "
  8637. if $test `./findhdr sys/ioctl.h`; then
  8638.     val="$define"
  8639.     echo '<sys/ioctl.h> found.' >&4
  8640. else
  8641.     val="$undef"
  8642.     if $test $i_sysfilio = "$define"; then
  8643.         echo '<sys/ioctl.h> NOT found.' >&4
  8644.     else
  8645.         $test $i_sgtty = "$define" && xxx="sgtty.h"
  8646.         $test $i_termio = "$define" && xxx="termio.h"
  8647.         $test $i_termios = "$define" && xxx="termios.h"
  8648. echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
  8649.     fi
  8650. fi
  8651. set i_sysioctl
  8652. eval $setvar
  8653.  
  8654. : see if this is a sys/param system
  8655. set sys/param.h i_sysparam
  8656. eval $inhdr
  8657.  
  8658. : see if sys/stat.h is available
  8659. set sys/stat.h i_sysstat
  8660. eval $inhdr
  8661.  
  8662. : see if sys/types.h has to be included
  8663. set sys/types.h i_systypes
  8664. eval $inhdr
  8665.  
  8666. : see if this is a sys/un.h system
  8667. set sys/un.h i_sysun
  8668. eval $inhdr
  8669.  
  8670. : see if this is a unistd.h system
  8671. set unistd.h i_unistd
  8672. eval $inhdr
  8673.  
  8674. : see if this is an utime system
  8675. set utime.h i_utime
  8676. eval $inhdr
  8677.  
  8678. : see if this is a vfork system
  8679. case "$d_vfork" in
  8680. "$define")
  8681.     set vfork.h i_vfork
  8682.     eval $inhdr
  8683.     ;;
  8684. *)
  8685.     i_vfork="$undef"
  8686.     ;;
  8687. esac
  8688.  
  8689. : see if gdbm.h is available
  8690. set gdbm.h t_gdbm
  8691. eval $inhdr
  8692. case "$t_gdbm" in
  8693. $define)
  8694.     : see if gdbm_open exists
  8695.     set gdbm_open d_gdbm_open
  8696.     eval $inlibc
  8697.     case "$d_gdbm_open" in
  8698.     $undef)
  8699.         t_gdbm="$undef"
  8700.         echo "We won't be including <gdbm.h>"
  8701.         ;;
  8702.     esac
  8703.     ;;
  8704. esac
  8705. val="$t_gdbm"
  8706. set i_gdbm
  8707. eval $setvar
  8708.  
  8709. echo " "
  8710. echo "Looking for extensions..." >&4
  8711. cd ../ext
  8712. : If we are using the old config.sh, known_extensions may contain
  8713. : old or inaccurate or duplicate values.
  8714. known_extensions=''
  8715. : We do not use find because it might not be available.
  8716. : We do not just use MANIFEST because the user may have dropped
  8717. : some additional extensions into the source tree and expect them
  8718. : to be built.
  8719. for xxx in * ; do
  8720.     if $test -f $xxx/$xxx.xs; then
  8721.         known_extensions="$known_extensions $xxx"
  8722.     else
  8723.         if $test -d $xxx; then
  8724.             cd $xxx
  8725.             for yyy in * ; do
  8726.                 if $test -f $yyy/$yyy.xs; then
  8727.                     known_extensions="$known_extensions $xxx/$yyy"
  8728.                 fi
  8729.             done
  8730.             cd ..
  8731.         fi
  8732.     fi
  8733. done
  8734. set X $known_extensions
  8735. shift
  8736. known_extensions="$*"
  8737. cd ../UU
  8738.  
  8739. : Now see which are supported on this system.
  8740. avail_ext=''
  8741. for xxx in $known_extensions ; do
  8742.     case "$xxx" in
  8743.     DB_File) case "$i_db" in 
  8744.         $define) avail_ext="$avail_ext $xxx" ;;
  8745.         esac
  8746.         ;;
  8747.     GDBM_File) case "$i_gdbm" in 
  8748.         $define) avail_ext="$avail_ext $xxx" ;;
  8749.         esac
  8750.         ;;
  8751.     NDBM_File) case "$i_ndbm" in 
  8752.         $define) avail_ext="$avail_ext $xxx" ;;
  8753.         esac
  8754.         ;;
  8755.     ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in 
  8756.         *"${define}"*) avail_ext="$avail_ext $xxx" ;;
  8757.         esac
  8758.         ;;
  8759.     POSIX) case "$useposix" in 
  8760.         true|define|y) avail_ext="$avail_ext $xxx" ;;
  8761.         esac
  8762.         ;;
  8763.     SAFE) case "$usesafe" in 
  8764.         true|define|y) avail_ext="$avail_ext $xxx" ;;
  8765.         esac
  8766.         ;;
  8767.     Socket) case "$d_socket" in 
  8768.         $define) avail_ext="$avail_ext $xxx" ;;
  8769.         esac
  8770.         ;;
  8771.     *)      avail_ext="$avail_ext $xxx"
  8772.         ;;
  8773.     esac
  8774. done
  8775.  
  8776. set X $avail_ext
  8777. shift
  8778. avail_ext="$*"
  8779.  
  8780. case $usedl in
  8781. $define)
  8782.     $cat <<EOM
  8783. A number of extensions are supplied with $package.  You may choose to
  8784. compile these extensions for dynamic loading (the default), compile
  8785. them into the $package executable (static loading), or not include
  8786. them at all.  Answer "none" to include no extensions.
  8787.  
  8788. EOM
  8789.     case "$dynamic_ext" in
  8790.     '') dflt="$avail_ext" ;;
  8791.     *)    dflt="$dynamic_ext" ;;
  8792.     esac
  8793.     case "$dflt" in
  8794.     '')    dflt=none;;
  8795.     esac
  8796.     rp="What extensions do you wish to load dynamically?"
  8797.     . ./myread
  8798.     case "$ans" in
  8799.     none) dynamic_ext=' ' ;;
  8800.     *) dynamic_ext="$ans" ;;
  8801.     esac
  8802.  
  8803.     case "$static_ext" in
  8804.     '')
  8805.         : Exclude those already listed in dynamic linking
  8806.         dflt=''
  8807.         for xxx in $avail_ext; do
  8808.             case " $dynamic_ext " in
  8809.             *" $xxx "*) ;;
  8810.             *) dflt="$dflt $xxx" ;;
  8811.             esac
  8812.         done
  8813.         set X $dflt
  8814.         shift
  8815.         dflt="$*"
  8816.         ;;
  8817.     *)  dflt="$static_ext" 
  8818.         ;;
  8819.     esac
  8820.  
  8821.     case "$dflt" in
  8822.     '')    dflt=none;;
  8823.     esac
  8824.     rp="What extensions do you wish to load statically?"
  8825.     . ./myread
  8826.     case "$ans" in
  8827.     none) static_ext=' ' ;;
  8828.     *) static_ext="$ans" ;;
  8829.     esac
  8830.     ;;
  8831. *)
  8832.     $cat <<EOM
  8833. A number of extensions are supplied with $package.  Answer "none" 
  8834. to include no extensions. 
  8835.  
  8836. EOM
  8837.     case "$static_ext" in
  8838.     '') dflt="$avail_ext" ;;
  8839.     *)    dflt="$static_ext" ;;
  8840.     esac
  8841.  
  8842.     case "$dflt" in
  8843.     '')    dflt=none;;
  8844.     esac
  8845.     rp="What extensions do you wish to include?"
  8846.     . ./myread
  8847.     case "$ans" in
  8848.     none) static_ext=' ' ;;
  8849.     *) static_ext="$ans" ;;
  8850.     esac
  8851.     ;;
  8852. esac
  8853.  
  8854. set X $dynamic_ext $static_ext
  8855. shift
  8856. extensions="$*"
  8857.  
  8858. : Remove build directory name from cppstdin so it can be used from
  8859. : either the present location or the final installed location.
  8860. echo " "
  8861. : Get out of the UU directory to get correct path name.
  8862. cd ..
  8863. case "$cppstdin" in
  8864. `pwd`/cppstdin)
  8865.     echo "Stripping down cppstdin path name"
  8866.     cppstdin=cppstdin
  8867.     ;;
  8868. esac
  8869. cd UU
  8870.  
  8871. : end of configuration questions
  8872. echo " "
  8873. echo "End of configuration questions."
  8874. echo " "
  8875.  
  8876. : back to where it started
  8877. if test -d ../UU; then
  8878.     cd ..
  8879. fi
  8880.  
  8881. : configuration may be patched via a 'config.over' file
  8882. if $test -f config.over; then
  8883.     echo " "
  8884.     dflt=y
  8885.     rp='I see a config.over file.  Do you wish to load it?'
  8886.     . UU/myread
  8887.     case "$ans" in
  8888.     n*) echo "OK, I'll ignore it.";;
  8889.     *)    . ./config.over
  8890.         echo "Configuration override changes have been loaded."
  8891.         ;;
  8892.     esac
  8893. fi
  8894.  
  8895. : in case they want portability, strip down executable paths
  8896. case "$d_portable" in
  8897. "$define")
  8898.     echo " "
  8899.     echo "Stripping down executable paths..." >&4
  8900.     for file in $loclist $trylist; do
  8901.         eval $file="\$file"
  8902.     done
  8903.     ;;
  8904. esac
  8905.  
  8906. : create config.sh file
  8907. echo " "
  8908. echo "Creating config.sh..." >&4
  8909. $spitshell <<EOT >config.sh
  8910. $startsh
  8911. #
  8912. # This file was produced by running the Configure script. It holds all the
  8913. # definitions figured out by Configure. Should you modify one of these values,
  8914. # do not forget to propagate your changes by running "Configure -der". You may
  8915. # instead choose to run each of the .SH files by yourself, or "Configure -S".
  8916. #
  8917.  
  8918. # Configuration time: $cf_time
  8919. # Configured by: $cf_by
  8920. # Target system: $myuname
  8921.  
  8922. Author='$Author'
  8923. Date='$Date'
  8924. Header='$Header'
  8925. Id='$Id'
  8926. Locker='$Locker'
  8927. Log='$Log'
  8928. Mcc='$Mcc'
  8929. RCSfile='$RCSfile'
  8930. Revision='$Revision'
  8931. Source='$Source'
  8932. State='$State'
  8933. afs='$afs'
  8934. alignbytes='$alignbytes'
  8935. aphostname='$aphostname'
  8936. ar='$ar'
  8937. archlib='$archlib'
  8938. archlibexp='$archlibexp'
  8939. archname='$archname'
  8940. archobjs='$archobjs'
  8941. awk='$awk'
  8942. baserev='$baserev'
  8943. bash='$bash'
  8944. bin='$bin'
  8945. binexp='$binexp'
  8946. bison='$bison'
  8947. byacc='$byacc'
  8948. byteorder='$byteorder'
  8949. c='$c'
  8950. castflags='$castflags'
  8951. cat='$cat'
  8952. cc='$cc'
  8953. cccdlflags='$cccdlflags'
  8954. ccdlflags='$ccdlflags'
  8955. ccflags='$ccflags'
  8956. cf_by='$cf_by'
  8957. cf_email='$cf_email'
  8958. cf_time='$cf_time'
  8959. chgrp='$chgrp'
  8960. chmod='$chmod'
  8961. chown='$chown'
  8962. clocktype='$clocktype'
  8963. comm='$comm'
  8964. compress='$compress'
  8965. contains='$contains'
  8966. cp='$cp'
  8967. cpio='$cpio'
  8968. cpp='$cpp'
  8969. cpp_stuff='$cpp_stuff'
  8970. cppflags='$cppflags'
  8971. cpplast='$cpplast'
  8972. cppminus='$cppminus'
  8973. cpprun='$cpprun'
  8974. cppstdin='$cppstdin'
  8975. cryptlib='$cryptlib'
  8976. csh='$csh'
  8977. d_Gconvert='$d_Gconvert'
  8978. d_access='$d_access'
  8979. d_alarm='$d_alarm'
  8980. d_archlib='$d_archlib'
  8981. d_attribut='$d_attribut'
  8982. d_bcmp='$d_bcmp'
  8983. d_bcopy='$d_bcopy'
  8984. d_bsd='$d_bsd'
  8985. d_bsdpgrp='$d_bsdpgrp'
  8986. d_bzero='$d_bzero'
  8987. d_casti32='$d_casti32'
  8988. d_castneg='$d_castneg'
  8989. d_charvspr='$d_charvspr'
  8990. d_chown='$d_chown'
  8991. d_chroot='$d_chroot'
  8992. d_chsize='$d_chsize'
  8993. d_closedir='$d_closedir'
  8994. d_const='$d_const'
  8995. d_crypt='$d_crypt'
  8996. d_csh='$d_csh'
  8997. d_cuserid='$d_cuserid'
  8998. d_dbl_dig='$d_dbl_dig'
  8999. d_difftime='$d_difftime'
  9000. d_dirnamlen='$d_dirnamlen'
  9001. d_dlerror='$d_dlerror'
  9002. d_dlopen='$d_dlopen'
  9003. d_dlsymun='$d_dlsymun'
  9004. d_dosuid='$d_dosuid'
  9005. d_dup2='$d_dup2'
  9006. d_eofnblk='$d_eofnblk'
  9007. d_eunice='$d_eunice'
  9008. d_fchmod='$d_fchmod'
  9009. d_fchown='$d_fchown'
  9010. d_fcntl='$d_fcntl'
  9011. d_fd_macros='$d_fd_macros'
  9012. d_fd_set='$d_fd_set'
  9013. d_fds_bits='$d_fds_bits'
  9014. d_fgetpos='$d_fgetpos'
  9015. d_flexfnam='$d_flexfnam'
  9016. d_flock='$d_flock'
  9017. d_fork='$d_fork'
  9018. d_fpathconf='$d_fpathconf'
  9019. d_fsetpos='$d_fsetpos'
  9020. d_getgrps='$d_getgrps'
  9021. d_gethent='$d_gethent'
  9022. d_gethname='$d_gethname'
  9023. d_getlogin='$d_getlogin'
  9024. d_getpgrp2='$d_getpgrp2'
  9025. d_getpgrp='$d_getpgrp'
  9026. d_getppid='$d_getppid'
  9027. d_getprior='$d_getprior'
  9028. d_htonl='$d_htonl'
  9029. d_index='$d_index'
  9030. d_isascii='$d_isascii'
  9031. d_killpg='$d_killpg'
  9032. d_link='$d_link'
  9033. d_locconv='$d_locconv'
  9034. d_lockf='$d_lockf'
  9035. d_lstat='$d_lstat'
  9036. d_mblen='$d_mblen'
  9037. d_mbstowcs='$d_mbstowcs'
  9038. d_mbtowc='$d_mbtowc'
  9039. d_memcmp='$d_memcmp'
  9040. d_memcpy='$d_memcpy'
  9041. d_memmove='$d_memmove'
  9042. d_memset='$d_memset'
  9043. d_mkdir='$d_mkdir'
  9044. d_mkfifo='$d_mkfifo'
  9045. d_mktime='$d_mktime'
  9046. d_msg='$d_msg'
  9047. d_msgctl='$d_msgctl'
  9048. d_msgget='$d_msgget'
  9049. d_msgrcv='$d_msgrcv'
  9050. d_msgsnd='$d_msgsnd'
  9051. d_mymalloc='$d_mymalloc'
  9052. d_nice='$d_nice'
  9053. d_oldarchlib='$d_oldarchlib'
  9054. d_oldsock='$d_oldsock'
  9055. d_open3='$d_open3'
  9056. d_pathconf='$d_pathconf'
  9057. d_pause='$d_pause'
  9058. d_phostname='$d_phostname'
  9059. d_pipe='$d_pipe'
  9060. d_poll='$d_poll'
  9061. d_portable='$d_portable'
  9062. d_pwage='$d_pwage'
  9063. d_pwchange='$d_pwchange'
  9064. d_pwclass='$d_pwclass'
  9065. d_pwcomment='$d_pwcomment'
  9066. d_pwexpire='$d_pwexpire'
  9067. d_pwquota='$d_pwquota'
  9068. d_readdir='$d_readdir'
  9069. d_readlink='$d_readlink'
  9070. d_rename='$d_rename'
  9071. d_rewinddir='$d_rewinddir'
  9072. d_rmdir='$d_rmdir'
  9073. d_safebcpy='$d_safebcpy'
  9074. d_safemcpy='$d_safemcpy'
  9075. d_seekdir='$d_seekdir'
  9076. d_select='$d_select'
  9077. d_sem='$d_sem'
  9078. d_semctl='$d_semctl'
  9079. d_semget='$d_semget'
  9080. d_semop='$d_semop'
  9081. d_setegid='$d_setegid'
  9082. d_seteuid='$d_seteuid'
  9083. d_setlinebuf='$d_setlinebuf'
  9084. d_setlocale='$d_setlocale'
  9085. d_setpgid='$d_setpgid'
  9086. d_setpgrp2='$d_setpgrp2'
  9087. d_setpgrp='$d_setpgrp'
  9088. d_setprior='$d_setprior'
  9089. d_setregid='$d_setregid'
  9090. d_setresgid='$d_setresgid'
  9091. d_setresuid='$d_setresuid'
  9092. d_setreuid='$d_setreuid'
  9093. d_setrgid='$d_setrgid'
  9094. d_setruid='$d_setruid'
  9095. d_setsid='$d_setsid'
  9096. d_shm='$d_shm'
  9097. d_shmat='$d_shmat'
  9098. d_shmatprototype='$d_shmatprototype'
  9099. d_shmctl='$d_shmctl'
  9100. d_shmdt='$d_shmdt'
  9101. d_shmget='$d_shmget'
  9102. d_shrplib='$d_shrplib'
  9103. d_sigaction='$d_sigaction'
  9104. d_sigintrp='$d_sigintrp'
  9105. d_sigsetjmp='$d_sigsetjmp'
  9106. d_sigvec='$d_sigvec'
  9107. d_sigvectr='$d_sigvectr'
  9108. d_socket='$d_socket'
  9109. d_sockpair='$d_sockpair'
  9110. d_statblks='$d_statblks'
  9111. d_stdio_cnt_lval='$d_stdio_cnt_lval'
  9112. d_stdio_ptr_lval='$d_stdio_ptr_lval'
  9113. d_stdiobase='$d_stdiobase'
  9114. d_stdstdio='$d_stdstdio'
  9115. d_strchr='$d_strchr'
  9116. d_strcoll='$d_strcoll'
  9117. d_strctcpy='$d_strctcpy'
  9118. d_strerrm='$d_strerrm'
  9119. d_strerror='$d_strerror'
  9120. d_strxfrm='$d_strxfrm'
  9121. d_suidsafe='$d_suidsafe'
  9122. d_symlink='$d_symlink'
  9123. d_syscall='$d_syscall'
  9124. d_sysconf='$d_sysconf'
  9125. d_sysernlst='$d_sysernlst'
  9126. d_syserrlst='$d_syserrlst'
  9127. d_system='$d_system'
  9128. d_tcgetpgrp='$d_tcgetpgrp'
  9129. d_tcsetpgrp='$d_tcsetpgrp'
  9130. d_telldir='$d_telldir'
  9131. d_time='$d_time'
  9132. d_times='$d_times'
  9133. d_truncate='$d_truncate'
  9134. d_tzname='$d_tzname'
  9135. d_umask='$d_umask'
  9136. d_uname='$d_uname'
  9137. d_vfork='$d_vfork'
  9138. d_void_closedir='$d_void_closedir'
  9139. d_voidsig='$d_voidsig'
  9140. d_voidtty='$d_voidtty'
  9141. d_volatile='$d_volatile'
  9142. d_vprintf='$d_vprintf'
  9143. d_wait4='$d_wait4'
  9144. d_waitpid='$d_waitpid'
  9145. d_wcstombs='$d_wcstombs'
  9146. d_wctomb='$d_wctomb'
  9147. d_xenix='$d_xenix'
  9148. date='$date'
  9149. db_hashtype='$db_hashtype'
  9150. db_prefixtype='$db_prefixtype'
  9151. defvoidused='$defvoidused'
  9152. direntrytype='$direntrytype'
  9153. dlext='$dlext'
  9154. dlsrc='$dlsrc'
  9155. dynamic_ext='$dynamic_ext'
  9156. eagain='$eagain'
  9157. echo='$echo'
  9158. egrep='$egrep'
  9159. emacs='$emacs'
  9160. eunicefix='$eunicefix'
  9161. exe_ext='$exe_ext'
  9162. expr='$expr'
  9163. extensions='$extensions'
  9164. find='$find'
  9165. firstmakefile='$firstmakefile'
  9166. flex='$flex'
  9167. fpostype='$fpostype'
  9168. freetype='$freetype'
  9169. full_csh='$full_csh'
  9170. full_sed='$full_sed'
  9171. gcc='$gcc'
  9172. gccversion='$gccversion'
  9173. gidtype='$gidtype'
  9174. glibpth='$glibpth'
  9175. grep='$grep'
  9176. groupcat='$groupcat'
  9177. groupstype='$groupstype'
  9178. h_fcntl='$h_fcntl'
  9179. h_sysfile='$h_sysfile'
  9180. hint='$hint'
  9181. hostcat='$hostcat'
  9182. huge='$huge'
  9183. i_bsdioctl='$i_bsdioctl'
  9184. i_db='$i_db'
  9185. i_dbm='$i_dbm'
  9186. i_dirent='$i_dirent'
  9187. i_dld='$i_dld'
  9188. i_dlfcn='$i_dlfcn'
  9189. i_fcntl='$i_fcntl'
  9190. i_float='$i_float'
  9191. i_gdbm='$i_gdbm'
  9192. i_grp='$i_grp'
  9193. i_limits='$i_limits'
  9194. i_locale='$i_locale'
  9195. i_malloc='$i_malloc'
  9196. i_math='$i_math'
  9197. i_memory='$i_memory'
  9198. i_ndbm='$i_ndbm'
  9199. i_neterrno='$i_neterrno'
  9200. i_niin='$i_niin'
  9201. i_pwd='$i_pwd'
  9202. i_rpcsvcdbm='$i_rpcsvcdbm'
  9203. i_sgtty='$i_sgtty'
  9204. i_stdarg='$i_stdarg'
  9205. i_stddef='$i_stddef'
  9206. i_stdlib='$i_stdlib'
  9207. i_string='$i_string'
  9208. i_sysdir='$i_sysdir'
  9209. i_sysfile='$i_sysfile'
  9210. i_sysfilio='$i_sysfilio'
  9211. i_sysin='$i_sysin'
  9212. i_sysioctl='$i_sysioctl'
  9213. i_sysndir='$i_sysndir'
  9214. i_sysparam='$i_sysparam'
  9215. i_sysselct='$i_sysselct'
  9216. i_syssockio='$i_syssockio'
  9217. i_sysstat='$i_sysstat'
  9218. i_systime='$i_systime'
  9219. i_systimek='$i_systimek'
  9220. i_systimes='$i_systimes'
  9221. i_systypes='$i_systypes'
  9222. i_sysun='$i_sysun'
  9223. i_termio='$i_termio'
  9224. i_termios='$i_termios'
  9225. i_time='$i_time'
  9226. i_unistd='$i_unistd'
  9227. i_utime='$i_utime'
  9228. i_varargs='$i_varargs'
  9229. i_varhdr='$i_varhdr'
  9230. i_vfork='$i_vfork'
  9231. incpath='$incpath'
  9232. inews='$inews'
  9233. installarchlib='$installarchlib'
  9234. installbin='$installbin'
  9235. installman1dir='$installman1dir'
  9236. installman3dir='$installman3dir'
  9237. installprivlib='$installprivlib'
  9238. installscript='$installscript'
  9239. installsitearch='$installsitearch'
  9240. installsitelib='$installsitelib'
  9241. intsize='$intsize'
  9242. known_extensions='$known_extensions'
  9243. ksh='$ksh'
  9244. large='$large'
  9245. ld='$ld'
  9246. lddlflags='$lddlflags'
  9247. ldflags='$ldflags'
  9248. less='$less'
  9249. lib_ext='$lib_ext'
  9250. libc='$libc'
  9251. libpth='$libpth'
  9252. libs='$libs'
  9253. libswanted='$libswanted'
  9254. line='$line'
  9255. lint='$lint'
  9256. lkflags='$lkflags'
  9257. ln='$ln'
  9258. lns='$lns'
  9259. locincpth='$locincpth'
  9260. loclibpth='$loclibpth'
  9261. lp='$lp'
  9262. lpr='$lpr'
  9263. ls='$ls'
  9264. lseektype='$lseektype'
  9265. mail='$mail'
  9266. mailx='$mailx'
  9267. make='$make'
  9268. mallocobj='$mallocobj'
  9269. mallocsrc='$mallocsrc'
  9270. malloctype='$malloctype'
  9271. man1dir='$man1dir'
  9272. man1direxp='$man1direxp'
  9273. man1ext='$man1ext'
  9274. man3dir='$man3dir'
  9275. man3direxp='$man3direxp'
  9276. man3ext='$man3ext'
  9277. medium='$medium'
  9278. mips='$mips'
  9279. mips_type='$mips_type'
  9280. mkdir='$mkdir'
  9281. models='$models'
  9282. modetype='$modetype'
  9283. more='$more'
  9284. mv='$mv'
  9285. myarchname='$myarchname'
  9286. mydomain='$mydomain'
  9287. myhostname='$myhostname'
  9288. myuname='$myuname'
  9289. n='$n'
  9290. nm_opt='$nm_opt'
  9291. nm_so_opt='$nm_so_opt'
  9292. nroff='$nroff'
  9293. o_nonblock='$o_nonblock'
  9294. obj_ext='$obj_ext'
  9295. oldarchlib='$oldarchlib'
  9296. oldarchlibexp='$oldarchlibexp'
  9297. optimize='$optimize'
  9298. orderlib='$orderlib'
  9299. osname='$osname'
  9300. osvers='$osvers'
  9301. package='$package'
  9302. pager='$pager'
  9303. passcat='$passcat'
  9304. patchlevel='$patchlevel'
  9305. path_sep='$path_sep'
  9306. perl='$perl'
  9307. perladmin='$perladmin'
  9308. perlpath='$perlpath'
  9309. pg='$pg'
  9310. phostname='$phostname'
  9311. plibpth='$plibpth'
  9312. pmake='$pmake'
  9313. pr='$pr'
  9314. prefix='$prefix'
  9315. prefixexp='$prefixexp'
  9316. privlib='$privlib'
  9317. privlibexp='$privlibexp'
  9318. prototype='$prototype'
  9319. randbits='$randbits'
  9320. ranlib='$ranlib'
  9321. rd_nodata='$rd_nodata'
  9322. rm='$rm'
  9323. rmail='$rmail'
  9324. runnm='$runnm'
  9325. scriptdir='$scriptdir'
  9326. scriptdirexp='$scriptdirexp'
  9327. sed='$sed'
  9328. selecttype='$selecttype'
  9329. sendmail='$sendmail'
  9330. sh='$sh'
  9331. shar='$shar'
  9332. sharpbang='$sharpbang'
  9333. shmattype='$shmattype'
  9334. shrpdir='$shrpdir'
  9335. shsharp='$shsharp'
  9336. sig_name='$sig_name'
  9337. sig_num='$sig_num'
  9338. signal_t='$signal_t'
  9339. sitearch='$sitearch'
  9340. sitearchexp='$sitearchexp'
  9341. sitelib='$sitelib'
  9342. sitelibexp='$sitelibexp'
  9343. sizetype='$sizetype'
  9344. sleep='$sleep'
  9345. smail='$smail'
  9346. small='$small'
  9347. so='$so'
  9348. sockethdr='$sockethdr'
  9349. socketlib='$socketlib'
  9350. sort='$sort'
  9351. spackage='$spackage'
  9352. spitshell='$spitshell'
  9353. split='$split'
  9354. ssizetype='$ssizetype'
  9355. startperl='$startperl'
  9356. startsh='$startsh'
  9357. static_ext='$static_ext'
  9358. stdchar='$stdchar'
  9359. stdio_base='$stdio_base'
  9360. stdio_bufsiz='$stdio_bufsiz'
  9361. stdio_cnt='$stdio_cnt'
  9362. stdio_ptr='$stdio_ptr'
  9363. strings='$strings'
  9364. submit='$submit'
  9365. subversion='$subversion'
  9366. sysman='$sysman'
  9367. tail='$tail'
  9368. tar='$tar'
  9369. tbl='$tbl'
  9370. test='$test'
  9371. timeincl='$timeincl'
  9372. timetype='$timetype'
  9373. touch='$touch'
  9374. tr='$tr'
  9375. troff='$troff'
  9376. uidtype='$uidtype'
  9377. uname='$uname'
  9378. uniq='$uniq'
  9379. usedl='$usedl'
  9380. usemymalloc='$usemymalloc'
  9381. usenm='$usenm'
  9382. useposix='$useposix'
  9383. usesafe='$usesafe'
  9384. usevfork='$usevfork'
  9385. usrinc='$usrinc'
  9386. uuname='$uuname'
  9387. vi='$vi'
  9388. voidflags='$voidflags'
  9389. xlibpth='$xlibpth'
  9390. zcat='$zcat'
  9391. EOT
  9392.  
  9393. : add special variables
  9394. $test -f patchlevel.h && \
  9395. awk '/^#define/ {printf "%s=%s\n",$2,$3}' patchlevel.h >>config.sh
  9396. echo "CONFIG=true" >>config.sh
  9397.  
  9398. : propagate old symbols
  9399. if $test -f UU/config.sh; then
  9400.     <UU/config.sh sort | uniq >UU/oldconfig.sh
  9401.     sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
  9402.     sort | uniq -u >UU/oldsyms
  9403.     set X `cat UU/oldsyms`
  9404.     shift
  9405.     case $# in
  9406.     0) ;;
  9407.     *)
  9408.         cat <<EOM
  9409. Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
  9410. EOM
  9411.         echo "# Variables propagated from previous config.sh file." >>config.sh
  9412.         for sym in `cat UU/oldsyms`; do
  9413.             echo "    Propagating $hint variable "'$'"$sym..."
  9414.             eval 'tmp="$'"${sym}"'"'
  9415.             echo "$tmp" | \
  9416.                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
  9417.         done
  9418.         ;;
  9419.     esac
  9420. fi
  9421.  
  9422. : Finish up by extracting the .SH files
  9423. case "$alldone" in
  9424. exit)
  9425.     $rm -rf UU
  9426.     echo "Done."
  9427.     exit 0
  9428.     ;;
  9429. cont)
  9430.     ;;
  9431. '')
  9432.     dflt=''
  9433.     nostick=true
  9434.     $cat <<EOM
  9435.  
  9436. If you'd like to make any changes to the config.sh file before I begin
  9437. to configure things, do it as a shell escape now (e.g. !vi config.sh).
  9438.  
  9439. EOM
  9440.     rp="Press return or use a shell escape to edit config.sh:"
  9441.     . UU/myread
  9442.     nostick=''
  9443.     case "$ans" in
  9444.     '') ;;
  9445.     *) : in case they cannot read
  9446.         sh 1>&4 -c "$ans";;
  9447.     esac
  9448.     ;;
  9449. esac
  9450.  
  9451. : if this fails, just run all the .SH files by hand
  9452. . ./config.sh
  9453.  
  9454. echo " "
  9455. exec 1>&4
  9456. . ./UU/extract
  9457.  
  9458. if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
  9459.     dflt=y
  9460.     case "$silent" in
  9461.     true) ;;
  9462.     *)
  9463.         $cat <<EOM
  9464.  
  9465. Now you need to generate make dependencies by running "make depend".
  9466. You might prefer to run it in background: "make depend > makedepend.out &"
  9467. It can take a while, so you might not want to run it right now.
  9468.  
  9469. EOM
  9470.         ;;
  9471.     esac
  9472.     rp="Run make depend now?"
  9473.     . UU/myread
  9474.     case "$ans" in
  9475.     y*)
  9476.         make depend && echo "Now you must run a make."
  9477.         ;;
  9478.     *)
  9479.         echo "You must run 'make depend' then 'make'."
  9480.         ;;
  9481.     esac
  9482. elif test -f [Mm]akefile; then
  9483.     echo " "
  9484.     echo "Now you must run a make."
  9485. else
  9486.     echo "Done."
  9487. fi
  9488.  
  9489. $rm -f kit*isdone ark*isdone
  9490. $rm -rf UU
  9491.  
  9492. : End of Configure
  9493.  
  9494.